home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 2 / AACD 2.iso / AACD / Magazine / GraphicsCards / StormMesa / src-glu / nurbsutl.s < prev    next >
Text File  |  1998-12-15  |  76KB  |  4,352 lines

  1.  
  2. ; Storm C Compiler
  3. ; Work2:Mesa3/Mesa-3.0/src-glu/nurbsutl.c
  4.     mc68030
  5.     mc68881
  6.     XREF    _call_user_error
  7.     XREF    _gluProject
  8.     XREF    _glLoadMatrixf
  9.     XREF    _glPopMatrix
  10.     XREF    _glPushMatrix
  11.     XREF    _glViewport
  12.     XREF    _glMatrixMode
  13.     XREF    _glPopAttrib
  14.     XREF    _glPushAttrib
  15.     XREF    _glGetIntegerv
  16.     XREF    _glGetDoublev
  17.     XREF    _qsort
  18.     XREF    _abort
  19.     XREF    _malloc
  20.     XREF    _free
  21.     XREF    _fabs__r
  22.     XREF    _sqrt__r
  23.  
  24.     SECTION "_test_knot:0",CODE
  25.  
  26.  
  27. ;GLenum
  28.     XDEF    _test_knot
  29. _test_knot
  30.     movem.l    d2-d5/a2,-(a7)
  31.     fmovem.x fp2,-(a7)
  32.     movem.l    $24(a7),d4/a2
  33.     move.l    $2C(a7),d5
  34. L332
  35. ;    tmp_knot=knot[0];
  36.     fmove.s    (a2),fp2
  37. ;    knot_mult=1;
  38.     moveq    #1,d3
  39. ;    for(i=1;
  40.     moveq    #1,d2
  41.     bra.b    L341
  42. L333
  43. ;        if(knot[i] < tmp_knot)
  44.     fmove.s    0(a2,d2.l*4),fp0
  45.     fcmp.x    fp2,fp0
  46.     fboge.b    L335
  47. L334
  48.     move.l    #$1879E,d0
  49.     fmovem.x (a7)+,fp2
  50.     movem.l    (a7)+,d2-d5/a2
  51.     rts
  52. L335
  53. ;        if(fabs(tmp_knot-knot[i]) > EPSILON)
  54.     fmove.x    fp2,fp0
  55.     fsub.s    0(a2,d2.l*4),fp0
  56.     fmove.d    fp0,-(a7)
  57.     jsr    _fabs__r
  58.     addq.w    #$8,a7
  59.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  60.     fbole.b    L339
  61. L336
  62. ;            if(knot_mult>order)
  63.     cmp.l    d5,d3
  64.     ble.b    L338
  65. L337
  66.     move.l    #$1879F,d0
  67.     fmovem.x (a7)+,fp2
  68.     movem.l    (a7)+,d2-d5/a2
  69.     rts
  70. L338
  71. ;            knot_mult=1;
  72.     moveq    #1,d3
  73. ;            tmp_knot=knot[i];
  74.     fmove.s    0(a2,d2.l*4),fp2
  75.     bra.b    L340
  76. L339
  77. ;            ++knot_mult;
  78.     addq.l    #1,d3
  79. L340
  80.     addq.l    #1,d2
  81. L341
  82.     cmp.l    d4,d2
  83.     blt.b    L333
  84. L342
  85.     moveq    #0,d0
  86.     fmovem.x (a7)+,fp2
  87.     movem.l    (a7)+,d2-d5/a2
  88.     rts
  89.  
  90.     SECTION "_knot_sort:0",CODE
  91.  
  92.     rts
  93.  
  94. ;static int
  95. _knot_sort
  96.     fmovem.x fp2/fp3,-(a7)
  97.     move.l    $20(a7),a0
  98.     move.l    $1C(a7),a1
  99. L343
  100. ;    x=*((GLfloat *)a);
  101.     fmove.s    (a1),fp3
  102. ;    y=*((GLfloat *)b);
  103.     fmove.s    (a0),fp2
  104. ;    if(fabs(x-y) < EPSILON)
  105.     fmove.x    fp3,fp0
  106.     fsub.x    fp2,fp0
  107.     fmove.d    fp0,-(a7)
  108.     jsr    _fabs__r
  109.     addq.w    #$8,a7
  110.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  111.     fboge.b    L345
  112. L344
  113.     moveq    #0,d0
  114.     fmovem.x (a7)+,fp2/fp3
  115.     rts
  116. L345
  117. ;    if(x > y)
  118.     fcmp.x    fp2,fp3
  119.     fbole.b    L347
  120. L346
  121.     moveq    #1,d0
  122.     fmovem.x (a7)+,fp2/fp3
  123.     rts
  124. L347
  125.     moveq    #-1,d0
  126.     fmovem.x (a7)+,fp2/fp3
  127.     rts
  128.  
  129.     SECTION "_collect_unified_knot:0",CODE
  130.  
  131.  
  132. ;void
  133.     XDEF    _collect_unified_knot
  134. _collect_unified_knot
  135. L361    EQU    -$3C
  136.     link    a5,#L361
  137.     movem.l    d2-d7/a2-a4,-(a7)
  138.     fmovem.x fp2/fp3,-(a7)
  139.     move.l    $C(a5),a0
  140.     move.l    $8(a5),a4
  141.     fmove.s    $14(a5),fp2
  142.     fmove.s    $10(a5),fp3
  143. L348
  144. ;    src_knot=src->unified_knot;
  145.     move.l    $8(a0),a2
  146. ;    dest_knot=dest->unified_knot;
  147.     move.l    a4,a1
  148.     move.l    $8(a1),a3
  149. ;    src_t_min=src->t_min;
  150.     move.l    $14(a0),d1
  151. ;    src_t_max=src->t_max;
  152.     move.l    $18(a0),-$10(a5)
  153. ;    dest_t_min=dest->t_min;
  154.     move.l    a4,a0
  155.     move.l    $14(a0),-$14(a5)
  156. ;    dest_t_max=dest->t_max;
  157.     move.l    a4,a0
  158.     move.l    $18(a0),d5
  159. ;    src_nknots=src->unified_nknots;
  160. ;    dest_nknots=dest->unified_nknots;
  161.     move.l    a4,a0
  162. ;    k=new_cnt=dest_nknots;
  163.     move.l    $C(a0),d6
  164.     move.l    d6,d7
  165. ;    for(i=src_t_min;
  166.     move.l    d1,d3
  167.     bra    L359
  168. L349
  169. ;        if(src_knot[i] - maximal_min_knot > -EPSILON &&
  170.     fmove.s    0(a2,d3.l*4),fp0
  171.     fsub.x    fp3,fp0
  172.     fcmp.d    #$.BEB0C6F7.A0B5ED8D,fp0
  173.     fbole.b    L358
  174. L350
  175.     fmove.s    0(a2,d3.l*4),fp0
  176.     fsub.x    fp2,fp0
  177.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  178.     fboge.b    L358
  179. L351
  180. ;        not_found_flag=GL_TRUE;
  181.     moveq    #1,d4
  182. ;        for(j=dest_t_min;
  183.     move.l    -$14(a5),d2
  184.     bra.b    L355
  185. L352
  186. ;            if(fabs(dest_knot[j]-src_knot[i]) < EPSILON)
  187.     fmove.s    0(a3,d2.l*4),fp0
  188.     fsub.s    0(a2,d3.l*4),fp0
  189.     fmove.d    fp0,-(a7)
  190.     jsr    _fabs__r
  191.     addq.w    #$8,a7
  192.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  193.     fboge.b    L354
  194. L353
  195. ;                not_found_flag=GL_FALSE;
  196.     moveq    #0,d4
  197. ;                
  198.     bra.b    L356
  199. L354
  200.     addq.l    #1,d2
  201. L355
  202.     cmp.l    d5,d2
  203.     ble.b    L352
  204. L356
  205. ;        if(not_found_flag)
  206.     tst.b    d4
  207.     beq.b    L358
  208. L357
  209. ;            dest_knot[k++]=src_knot[i];
  210.     move.l    d6,d0
  211.     move.l    d6,d1
  212.     addq.l    #1,d1
  213.     move.l    d1,d6
  214.     move.l    0(a2,d3.l*4),0(a3,d0.l*4)
  215. ;            ++new_cnt;
  216.     move.l    d7,d0
  217.     addq.l    #1,d0
  218.     move.l    d0,d7
  219. ;            ++(dest->t_max);
  220.     move.l    a4,a0
  221.     move.l    $18(a0),d0
  222.     addq.l    #1,d0
  223.     move.l    a4,a0
  224.     move.l    d0,$18(a0)
  225. ;            ++(dest->delta_nknots);
  226.     move.l    a4,a0
  227.     move.l    $1C(a0),d0
  228.     addq.l    #1,d0
  229.     move.l    a4,a0
  230.     move.l    d0,$1C(a0)
  231. L358
  232.     addq.l    #1,d3
  233. L359
  234.     cmp.l    -$10(a5),d3
  235.     ble    L349
  236. L360
  237. ;    dest->unified_nknots=new_cnt;
  238.     move.l    a4,a0
  239.     move.l    d7,$C(a0)
  240. ;    qsort((void *)dest_knot,(size_t)new_cnt,(size_t)sizeof(GLfloat),
  241.     move.l    #_knot_sort,-(a7)
  242.     pea    4.w
  243.     move.l    d7,-(a7)
  244.     move.l    a3,-(a7)
  245.     jsr    _qsort
  246.     add.w    #$10,a7
  247.     fmovem.x (a7)+,fp2/fp3
  248.     movem.l    (a7)+,d2-d7/a2-a4
  249.     unlk    a5
  250.     rts
  251.  
  252.     SECTION "_set_new_t_min_t_max:0",CODE
  253.  
  254.  
  255. ;static void
  256. _set_new_t_min_t_max
  257. L424    EQU    -$1C
  258.     link    a5,#L424
  259.     movem.l    d2/d3/a2-a4,-(a7)
  260.     fmovem.x fp2/fp3,-(a7)
  261.     move.l    $8(a5),a2
  262.     move.l    $14(a5),a3
  263.     move.l    $10(a5),a4
  264.     fmove.s    $18(a5),fp2
  265.     fmove.s    $1C(a5),fp3
  266. L362
  267. ;    if(minimal_max_knot-maximal_min_knot < EPSILON)
  268.     fmove.x    fp3,fp0
  269.     fsub.x    fp2,fp0
  270.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  271.     fboge.b    L364
  272. L363
  273. ;        geom_knot->t_min=geom_knot->t_max=0;
  274.     clr.l    $18(a2)
  275.     clr.l    $14(a2)
  276. ;        color_knot->t_min=color_knot->t_max=0;
  277.     move.l    $C(a5),a0
  278.     clr.l    $18(a0)
  279.     move.l    $C(a5),a0
  280.     clr.l    $14(a0)
  281. ;        normal_knot->t_min=normal_knot->t_max=0;
  282.     move.l    a4,a0
  283.     clr.l    $18(a0)
  284.     move.l    a4,a0
  285.     clr.l    $14(a0)
  286. ;        texture_knot->t_min=texture_knot->t_max=0;
  287.     move.l    a3,a0
  288.     clr.l    $18(a0)
  289.     move.l    a3,a0
  290.     clr.l    $14(a0)
  291.     bra    L423
  292. L364
  293. ;        if(geom_knot->unified_knot!=NULL)
  294.     move.l    $8(a2),a0
  295.     cmp.w    #0,a0
  296.     beq.b    L376
  297. L365
  298. ;            cnt=geom_knot->unified_nknots;
  299.     move.l    $C(a2),d2
  300. ;            for(t_min=0;
  301.     moveq    #0,d3
  302.     bra.b    L369
  303. L366
  304. ;                if(fabs((geom_knot->unified_knot)[t_min] - maximal_min_knot)
  305.     move.l    $8(a2),a0
  306.     fmove.s    0(a0,d3.l*4),fp0
  307.     fsub.x    fp2,fp0
  308.     fmove.d    fp0,-(a7)
  309.     jsr    _fabs__r
  310.     addq.w    #$8,a7
  311.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  312.     fboge.b    L368
  313. L367
  314. ;                    
  315.     bra.b    L370
  316. L368
  317.     addq.l    #1,d3
  318. L369
  319.     cmp.l    d2,d3
  320.     blo.b    L366
  321. L370
  322. ;            for(t_max=cnt-1;
  323.     subq.l    #1,d2
  324.     bra.b    L374
  325. L371
  326. ;                if(fabs((geom_knot->unified_knot)[t_max] - minimal_max_knot)
  327.     move.l    $8(a2),a0
  328.     fmove.s    0(a0,d2.l*4),fp0
  329.     fsub.x    fp3,fp0
  330.     fmove.d    fp0,-(a7)
  331.     jsr    _fabs__r
  332.     addq.w    #$8,a7
  333.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  334.     fboge.b    L373
  335. L372
  336. ;                    
  337.     bra.b    L375
  338. L373
  339.     subq.l    #1,d2
  340. L374
  341.     tst.l    d2
  342.     bne.b    L371
  343. L375
  344.     bra.b    L387
  345. L376
  346. ;        if(geom_knot->nknots)
  347.     tst.l    4(a2)
  348.     beq.b    L387
  349. L377
  350. ;            cnt=geom_knot->nknots;
  351.     move.l    4(a2),d2
  352. ;            for(t_min=0;
  353.     moveq    #0,d3
  354.     bra.b    L381
  355. L378
  356. ;                if(fabs((geom_knot->knot)[t_min] - maximal_min_knot) < EPSIL
  357.     move.l    (a2),a0
  358.     fmove.s    0(a0,d3.l*4),fp0
  359.     fsub.x    fp2,fp0
  360.     fmove.d    fp0,-(a7)
  361.     jsr    _fabs__r
  362.     addq.w    #$8,a7
  363.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  364.     fboge.b    L380
  365. L379
  366. ;                    
  367.     bra.b    L382
  368. L380
  369.     addq.l    #1,d3
  370. L381
  371.     cmp.l    d2,d3
  372.     blo.b    L378
  373. L382
  374. ;            for(t_max=cnt-1;
  375.     subq.l    #1,d2
  376.     bra.b    L386
  377. L383
  378. ;                if(fabs((geom_knot->knot)[t_max] - minimal_max_knot) < EPSIL
  379.     move.l    (a2),a0
  380.     fmove.s    0(a0,d2.l*4),fp0
  381.     fsub.x    fp3,fp0
  382.     fmove.d    fp0,-(a7)
  383.     jsr    _fabs__r
  384.     addq.w    #$8,a7
  385.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  386.     fboge.b    L385
  387. L384
  388. ;                    
  389.     bra.b    L387
  390. L385
  391.     subq.l    #1,d2
  392. L386
  393.     tst.l    d2
  394.     bne.b    L383
  395. L387
  396. ;        geom_knot->t_min=t_min;
  397.     move.l    d3,$14(a2)
  398. ;        geom_knot->t_max=t_max;
  399.     move.l    d2,$18(a2)
  400. ;        if(color_knot->unified_knot!=NULL)
  401.     move.l    $C(a5),a1
  402.     move.l    $8(a1),a0
  403.     cmp.w    #0,a0
  404.     beq    L399
  405. L388
  406. ;            cnt=color_knot->unified_nknots;
  407.     move.l    $C(a5),a0
  408.     move.l    $C(a0),d2
  409. ;            for(t_min=0;
  410.     moveq    #0,d3
  411.     bra.b    L392
  412. L389
  413. ;                if(fabs((color_knot->unified_knot)[t_min] - maximal_min_knot)
  414.     move.l    $C(a5),a1
  415.     move.l    $8(a1),a0
  416.     fmove.s    0(a0,d3.l*4),fp0
  417.     fsub.x    fp2,fp0
  418.     fmove.d    fp0,-(a7)
  419.     jsr    _fabs__r
  420.     addq.w    #$8,a7
  421.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  422.     fboge.b    L391
  423. L390
  424. ;                    
  425.     bra.b    L393
  426. L391
  427.     addq.l    #1,d3
  428. L392
  429.     cmp.l    d2,d3
  430.     blo.b    L389
  431. L393
  432. ;            for(t_max=cnt-1;
  433.     subq.l    #1,d2
  434.     bra.b    L397
  435. L394
  436. ;                if(fabs((color_knot->unified_knot)[t_max] - minimal_max_knot)
  437.     move.l    $C(a5),a1
  438.     move.l    $8(a1),a0
  439.     fmove.s    0(a0,d2.l*4),fp0
  440.     fsub.x    fp3,fp0
  441.     fmove.d    fp0,-(a7)
  442.     jsr    _fabs__r
  443.     addq.w    #$8,a7
  444.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  445.     fboge.b    L396
  446. L395
  447. ;                    
  448.     bra.b    L398
  449. L396
  450.     subq.l    #1,d2
  451. L397
  452.     tst.l    d2
  453.     bne.b    L394
  454. L398
  455. ;            color_knot->t_min=t_min;
  456.     move.l    $C(a5),a0
  457.     move.l    d3,$14(a0)
  458. ;            color_knot->t_max=t_max;
  459.     move.l    $C(a5),a0
  460.     move.l    d2,$18(a0)
  461. L399
  462. ;        if(normal_knot->unified_knot!=NULL)
  463.     move.l    a4,a1
  464.     move.l    $8(a1),a0
  465.     cmp.w    #0,a0
  466.     beq    L411
  467. L400
  468. ;            cnt=normal_knot->unified_nknots;
  469.     move.l    a4,a0
  470.     move.l    $C(a0),d2
  471. ;            for(t_min=0;
  472.     moveq    #0,d3
  473.     bra.b    L404
  474. L401
  475. ;                if(fabs((normal_knot->unified_knot)[t_min] - maximal_min_kno
  476.     move.l    a4,a1
  477.     move.l    $8(a1),a0
  478.     fmove.s    0(a0,d3.l*4),fp0
  479.     fsub.x    fp2,fp0
  480.     fmove.d    fp0,-(a7)
  481.     jsr    _fabs__r
  482.     addq.w    #$8,a7
  483.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  484.     fboge.b    L403
  485. L402
  486. ;                    
  487.     bra.b    L405
  488. L403
  489.     addq.l    #1,d3
  490. L404
  491.     cmp.l    d2,d3
  492.     blo.b    L401
  493. L405
  494. ;            for(t_max=cnt-1;
  495.     subq.l    #1,d2
  496.     bra.b    L409
  497. L406
  498. ;                if(fabs((normal_knot->unified_knot)[t_max] - minimal_max_kno
  499.     move.l    a4,a1
  500.     move.l    $8(a1),a0
  501.     fmove.s    0(a0,d2.l*4),fp0
  502.     fsub.x    fp3,fp0
  503.     fmove.d    fp0,-(a7)
  504.     jsr    _fabs__r
  505.     addq.w    #$8,a7
  506.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  507.     fboge.b    L408
  508. L407
  509. ;                    
  510.     bra.b    L410
  511. L408
  512.     subq.l    #1,d2
  513. L409
  514.     tst.l    d2
  515.     bne.b    L406
  516. L410
  517. ;            normal_knot->t_min=t_min;
  518.     move.l    a4,a0
  519.     move.l    d3,$14(a0)
  520. ;            normal_knot->t_max=t_max;
  521.     move.l    a4,a0
  522.     move.l    d2,$18(a0)
  523. L411
  524. ;        if(texture_knot->unified_knot!=NULL)
  525.     move.l    a3,a1
  526.     move.l    $8(a1),a0
  527.     cmp.w    #0,a0
  528.     beq    L423
  529. L412
  530. ;            cnt=texture_knot->unified_nknots;
  531.     move.l    a3,a0
  532.     move.l    $C(a0),d2
  533. ;            for(t_min=0;
  534.     moveq    #0,d3
  535.     bra.b    L416
  536. L413
  537. ;                if(fabs((texture_knot->unified_knot)[t_min] - maximal_min_kn
  538.     move.l    a3,a1
  539.     move.l    $8(a1),a0
  540.     fmove.s    0(a0,d3.l*4),fp0
  541.     fsub.x    fp2,fp0
  542.     fmove.d    fp0,-(a7)
  543.     jsr    _fabs__r
  544.     addq.w    #$8,a7
  545.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  546.     fboge.b    L415
  547. L414
  548. ;                    
  549.     bra.b    L417
  550. L415
  551.     addq.l    #1,d3
  552. L416
  553.     cmp.l    d2,d3
  554.     blo.b    L413
  555. L417
  556. ;            for(t_max=cnt-1;
  557.     subq.l    #1,d2
  558.     bra.b    L421
  559. L418
  560. ;                if(fabs((texture_knot->unified_knot)[t_max] - minimal_max_kn
  561.     move.l    a3,a1
  562.     move.l    $8(a1),a0
  563.     fmove.s    0(a0,d2.l*4),fp0
  564.     fsub.x    fp3,fp0
  565.     fmove.d    fp0,-(a7)
  566.     jsr    _fabs__r
  567.     addq.w    #$8,a7
  568.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  569.     fboge.b    L420
  570. L419
  571. ;                    
  572.     bra.b    L422
  573. L420
  574.     subq.l    #1,d2
  575. L421
  576.     tst.l    d2
  577.     bne.b    L418
  578. L422
  579. ;            texture_knot->t_min=t_min;
  580.     move.l    a3,a0
  581.     move.l    d3,$14(a0)
  582. ;            texture_knot->t_max=t_max;
  583.     move.l    a3,a0
  584.     move.l    d2,$18(a0)
  585. L423
  586.     fmovem.x (a7)+,fp2/fp3
  587.     movem.l    (a7)+,d2/d3/a2-a4
  588.     unlk    a5
  589.     rts
  590.  
  591.     SECTION "_select_knot_working_range:0",CODE
  592.  
  593.  
  594. ;GLenum
  595.     XDEF    _select_knot_working_range
  596. _select_knot_working_range
  597. L482    EQU    -$44
  598.     link    a5,#L482
  599.     movem.l    d2/a2-a4,-(a7)
  600.     fmovem.x fp2/fp3,-(a7)
  601.     movem.l    $10(a5),a2-a4
  602. L425
  603. ;    max_nknots=geom_knot->nknots;
  604.     move.l    $C(a5),a0
  605.     move.l    4(a0),d2
  606. ;    if(color_knot->unified_knot)
  607.     tst.l    $8(a2)
  608.     beq.b    L427
  609. L426
  610. ;        max_nknots+=color_knot->nknots;
  611.     add.l    4(a2),d2
  612. L427
  613. ;    if(normal_knot->unified_knot)
  614.     move.l    a3,a1
  615.     tst.l    $8(a1)
  616.     beq.b    L429
  617. L428
  618. ;        max_nknots+=normal_knot->nknots;
  619.     move.l    a3,a0
  620.     add.l    4(a0),d2
  621. L429
  622. ;    if(texture_knot->unified_knot)
  623.     move.l    a4,a1
  624.     tst.l    $8(a1)
  625.     beq.b    L431
  626. L430
  627. ;        max_nknots+=texture_knot->nknots;
  628.     move.l    a4,a0
  629.     add.l    4(a0),d2
  630. L431
  631. ;    maximal_min_knot=(geom_knot->knot)[geom_knot->t_min];
  632.     move.l    $C(a5),a1
  633.     move.l    (a1),a0
  634.     move.l    $C(a5),a1
  635.     move.l    $14(a1),d0
  636.     fmove.s    0(a0,d0.l*4),fp3
  637. ;    minimal_max_knot=(geom_knot->knot)[geom_knot->t_max];
  638.     move.l    $C(a5),a1
  639.     move.l    (a1),a0
  640.     move.l    $C(a5),a1
  641.     move.l    $18(a1),d0
  642.     fmove.s    0(a0,d0.l*4),fp2
  643. ;    if(max_nknots!=geom_knot->nknots)
  644.     move.l    $C(a5),a0
  645.     cmp.l    4(a0),d2
  646.     beq    L481
  647. L432
  648. ;        if((geom_knot->unified_knot=
  649.     move.l    d2,d0
  650.     moveq    #2,d1
  651.     asl.l    d1,d0
  652.     move.l    d0,-(a7)
  653.     jsr    _malloc
  654.     addq.w    #4,a7
  655.     move.l    $C(a5),a1
  656.     move.l    d0,$8(a1)
  657.     move.l    d0,a0
  658.     cmp.w    #0,a0
  659.     bne.b    L434
  660. L433
  661. ;            call_user_error(nobj,GLU_OUT_OF_MEMORY);
  662.     move.l    #$18A26,-(a7)
  663.     move.l    $8(a5),-(a7)
  664.     jsr    _call_user_error
  665.     addq.w    #$8,a7
  666.     move.l    #$18707,d0
  667.     fmovem.x (a7)+,fp2/fp3
  668.     movem.l    (a7)+,d2/a2-a4
  669.     unlk    a5
  670.     rts
  671. L434
  672. ;        geom_knot->unified_nknots=geom_knot->nknots;
  673.     move.l    $C(a5),a0
  674.     move.l    4(a0),d0
  675.     move.l    $C(a5),a0
  676.     move.l    d0,$C(a0)
  677. ;        for(i=0;
  678.     moveq    #0,d0
  679.     bra.b    L436
  680. L435
  681. ;            (geom_knot->unified_knot)[i]=(geom_knot->knot)[i];
  682.     move.l    $C(a5),a1
  683.     move.l    (a1),a0
  684.     fmove.s    0(a0,d0.l*4),fp0
  685.     move.l    $C(a5),a1
  686.     move.l    $8(a1),a0
  687.     fmove.s    fp0,0(a0,d0.l*4)
  688.     addq.l    #1,d0
  689. L436
  690.     move.l    $C(a5),a0
  691.     cmp.l    4(a0),d0
  692.     blt.b    L435
  693. L437
  694. ;        if(color_knot->unified_knot)
  695.     tst.l    $8(a2)
  696.     beq    L447
  697. L438
  698. ;            if((color_knot->knot)[color_knot->t_min] - maximal_min_knot >
  699.     move.l    $14(a2),d0
  700.     move.l    (a2),a0
  701.     fmove.s    0(a0,d0.l*4),fp0
  702.     fsub.x    fp3,fp0
  703.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  704.     fbole.b    L440
  705. L439
  706. ;                maximal_min_knot=(color_knot->knot)[color_knot->t_min];
  707.     move.l    $14(a2),d0
  708.     move.l    (a2),a0
  709.     fmove.s    0(a0,d0.l*4),fp3
  710. L440
  711. ;            if(minimal_max_knot - (color_knot->knot)[color_knot->t_max] >
  712.     move.l    $18(a2),d0
  713.     move.l    (a2),a0
  714.     fmove.x    fp2,fp0
  715.     fsub.s    0(a0,d0.l*4),fp0
  716.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  717.     fbole.b    L442
  718. L441
  719. ;                minimal_max_knot=(color_knot->knot)[color_knot->t_max];
  720.     move.l    $18(a2),d0
  721.     move.l    (a2),a0
  722.     fmove.s    0(a0,d0.l*4),fp2
  723. L442
  724. ;            if((color_knot->unified_knot=
  725.     move.l    d2,d0
  726.     moveq    #2,d1
  727.     asl.l    d1,d0
  728.     move.l    d0,-(a7)
  729.     jsr    _malloc
  730.     addq.w    #4,a7
  731.     move.l    d0,$8(a2)
  732.     move.l    d0,a0
  733.     cmp.w    #0,a0
  734.     bne.b    L444
  735. L443
  736. ;                free(geom_knot->unified_knot);
  737.     move.l    $C(a5),a1
  738.     move.l    $8(a1),-(a7)
  739.     jsr    _free
  740.     addq.w    #4,a7
  741. ;                call_user_error(nobj,GLU_OUT_OF_MEMORY);
  742.     move.l    #$18A26,-(a7)
  743.     move.l    $8(a5),-(a7)
  744.     jsr    _call_user_error
  745.     addq.w    #$8,a7
  746.     move.l    #$18707,d0
  747.     fmovem.x (a7)+,fp2/fp3
  748.     movem.l    (a7)+,d2/a2-a4
  749.     unlk    a5
  750.     rts
  751. L444
  752. ;            color_knot->unified_nknots=color_knot->nknots;
  753.     move.l    4(a2),d0
  754.     move.l    d0,$C(a2)
  755. ;            for(i=0;
  756.     moveq    #0,d0
  757.     bra.b    L446
  758. L445
  759. ;                (color_knot->unified_knot)[i]=(color_knot->knot)[i];
  760.     move.l    (a2),a0
  761.     fmove.s    0(a0,d0.l*4),fp0
  762.     move.l    $8(a2),a0
  763.     fmove.s    fp0,0(a0,d0.l*4)
  764.     addq.l    #1,d0
  765. L446
  766.     cmp.l    4(a2),d0
  767.     blt.b    L445
  768. L447
  769. ;        if(normal_knot->unified_knot)
  770.     move.l    a3,a1
  771.     tst.l    $8(a1)
  772.     beq    L457
  773. L448
  774. ;            if((normal_knot->knot)[normal_knot->t_min] - maximal_min_knot 
  775.     move.l    a3,a1
  776.     move.l    (a1),a0
  777.     move.l    a3,a1
  778.     move.l    $14(a1),d0
  779.     fmove.s    0(a0,d0.l*4),fp0
  780.     fsub.x    fp3,fp0
  781.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  782.     fbole.b    L450
  783. L449
  784. ;                maximal_min_knot=(normal_knot->knot)[normal_knot->t_min];
  785.     move.l    a3,a1
  786.     move.l    (a1),a0
  787.     move.l    a3,a1
  788.     move.l    $14(a1),d0
  789.     fmove.s    0(a0,d0.l*4),fp3
  790. L450
  791. ;            if(minimal_max_knot - (normal_knot->knot)[normal_knot->t_max] 
  792.     move.l    a3,a1
  793.     move.l    (a1),a0
  794.     move.l    a3,a1
  795.     move.l    $18(a1),d0
  796.     fmove.x    fp2,fp0
  797.     fsub.s    0(a0,d0.l*4),fp0
  798.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  799.     fbole.b    L452
  800. L451
  801. ;                minimal_max_knot=(normal_knot->knot)[normal_knot->t_max];
  802.     move.l    a3,a1
  803.     move.l    (a1),a0
  804.     move.l    a3,a1
  805.     move.l    $18(a1),d0
  806.     fmove.s    0(a0,d0.l*4),fp2
  807. L452
  808. ;            if((normal_knot->unified_knot=
  809.     move.l    d2,d0
  810.     moveq    #2,d1
  811.     asl.l    d1,d0
  812.     move.l    d0,-(a7)
  813.     jsr    _malloc
  814.     addq.w    #4,a7
  815.     move.l    a3,a1
  816.     move.l    d0,$8(a1)
  817.     move.l    d0,a0
  818.     cmp.w    #0,a0
  819.     bne.b    L454
  820. L453
  821. ;                free(geom_knot->unified_knot);
  822.     move.l    $C(a5),a1
  823.     move.l    $8(a1),-(a7)
  824.     jsr    _free
  825.     addq.w    #4,a7
  826. ;                free(color_knot->unified_knot);
  827.     move.l    $8(a2),-(a7)
  828.     jsr    _free
  829.     addq.w    #4,a7
  830. ;                call_user_error(nobj,GLU_OUT_OF_MEMORY);
  831.     move.l    #$18A26,-(a7)
  832.     move.l    $8(a5),-(a7)
  833.     jsr    _call_user_error
  834.     addq.w    #$8,a7
  835.     move.l    #$18707,d0
  836.     fmovem.x (a7)+,fp2/fp3
  837.     movem.l    (a7)+,d2/a2-a4
  838.     unlk    a5
  839.     rts
  840. L454
  841. ;            normal_knot->unified_nknots=normal_knot->nknots;
  842.     move.l    a3,a0
  843.     move.l    4(a0),d0
  844.     move.l    a3,a0
  845.     move.l    d0,$C(a0)
  846. ;            for(i=0;
  847.     moveq    #0,d0
  848.     bra.b    L456
  849. L455
  850. ;                (normal_knot->unified_knot)[i]=(normal_knot->knot)[i];
  851.     move.l    a3,a1
  852.     move.l    (a1),a0
  853.     fmove.s    0(a0,d0.l*4),fp0
  854.     move.l    a3,a1
  855.     move.l    $8(a1),a0
  856.     fmove.s    fp0,0(a0,d0.l*4)
  857.     addq.l    #1,d0
  858. L456
  859.     move.l    a3,a0
  860.     cmp.l    4(a0),d0
  861.     blt.b    L455
  862. L457
  863. ;        if(texture_knot->unified_knot)
  864.     move.l    a4,a1
  865.     tst.l    $8(a1)
  866.     beq    L467
  867. L458
  868. ;            if((texture_knot->knot)[texture_knot->t_min] - maximal_min_kno
  869.     move.l    a4,a1
  870.     move.l    (a1),a0
  871.     move.l    a4,a1
  872.     move.l    $14(a1),d0
  873.     fmove.s    0(a0,d0.l*4),fp0
  874.     fsub.x    fp3,fp0
  875.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  876.     fbole.b    L460
  877. L459
  878. ;                maximal_min_knot=(texture_knot->knot)[texture_knot->t_min];
  879.     move.l    a4,a1
  880.     move.l    (a1),a0
  881.     move.l    a4,a1
  882.     move.l    $14(a1),d0
  883.     fmove.s    0(a0,d0.l*4),fp3
  884. L460
  885. ;            if(minimal_max_knot - (texture_knot->knot)[texture_knot->t_max
  886.     move.l    a4,a1
  887.     move.l    (a1),a0
  888.     move.l    a4,a1
  889.     move.l    $18(a1),d0
  890.     fmove.x    fp2,fp0
  891.     fsub.s    0(a0,d0.l*4),fp0
  892.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  893.     fbole.b    L462
  894. L461
  895. ;                minimal_max_knot=(texture_knot->knot)[texture_knot->t_max];
  896.     move.l    a4,a1
  897.     move.l    (a1),a0
  898.     move.l    a4,a1
  899.     move.l    $18(a1),d0
  900.     fmove.s    0(a0,d0.l*4),fp2
  901. L462
  902. ;            if((texture_knot->unified_knot=
  903.     move.l    d2,d0
  904.     moveq    #2,d2
  905.     asl.l    d2,d0
  906.     move.l    d0,-(a7)
  907.     jsr    _malloc
  908.     addq.w    #4,a7
  909.     move.l    a4,a1
  910.     move.l    d0,$8(a1)
  911.     move.l    d0,a0
  912.     cmp.w    #0,a0
  913.     bne.b    L464
  914. L463
  915. ;                free(geom_knot->unified_knot);
  916.     move.l    $C(a5),a1
  917.     move.l    $8(a1),-(a7)
  918.     jsr    _free
  919.     addq.w    #4,a7
  920. ;                free(color_knot->unified_knot);
  921.     move.l    $8(a2),-(a7)
  922.     jsr    _free
  923.     addq.w    #4,a7
  924. ;                free(normal_knot->unified_knot);
  925.     move.l    a3,a1
  926.     move.l    $8(a1),-(a7)
  927.     jsr    _free
  928.     addq.w    #4,a7
  929. ;                call_user_error(nobj,GLU_OUT_OF_MEMORY);
  930.     move.l    #$18A26,-(a7)
  931.     move.l    $8(a5),-(a7)
  932.     jsr    _call_user_error
  933.     addq.w    #$8,a7
  934.     move.l    #$18707,d0
  935.     fmovem.x (a7)+,fp2/fp3
  936.     movem.l    (a7)+,d2/a2-a4
  937.     unlk    a5
  938.     rts
  939. L464
  940. ;            texture_knot->unified_nknots=texture_knot->nknots;
  941.     move.l    a4,a0
  942.     move.l    4(a0),d0
  943.     move.l    a4,a0
  944.     move.l    d0,$C(a0)
  945. ;            for(i=0;
  946.     moveq    #0,d0
  947.     bra.b    L466
  948. L465
  949. ;                (texture_knot->unified_knot)[i]=(texture_knot->knot)[i];
  950.     move.l    a4,a1
  951.     move.l    (a1),a0
  952.     fmove.s    0(a0,d0.l*4),fp0
  953.     move.l    a4,a1
  954.     move.l    $8(a1),a0
  955.     fmove.s    fp0,0(a0,d0.l*4)
  956.     addq.l    #1,d0
  957. L466
  958.     move.l    a4,a0
  959.     cmp.l    4(a0),d0
  960.     blt.b    L465
  961. L467
  962. ;        if(minimal_max_knot-maximal_min_knot < EPSILON)
  963.     fmove.x    fp2,fp0
  964.     fsub.x    fp3,fp0
  965.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  966.     fboge.b    L469
  967. L468
  968. ;            geom_knot->unified_nknots=0;
  969.     move.l    $C(a5),a0
  970.     clr.l    $C(a0)
  971. ;            color_knot->unified_nknots=0;
  972.     clr.l    $C(a2)
  973. ;            normal_knot->unified_nknots=0;
  974.     move.l    a3,a0
  975.     clr.l    $C(a0)
  976. ;            texture_knot->unified_nknots=0;
  977.     move.l    a4,a0
  978.     clr.l    $C(a0)
  979.     bra    L481
  980. L469
  981. ;            if(color_knot->unified_knot)
  982.     tst.l    $8(a2)
  983.     beq.b    L471
  984. L470
  985. ;                collect_unified_knot(geom_knot,color_knot,maximal_min_knot,
  986.     fmove.s    fp2,-(a7)
  987.     fmove.s    fp3,-(a7)
  988.     move.l    a2,-(a7)
  989.     move.l    $C(a5),-(a7)
  990.     jsr    _collect_unified_knot
  991.     add.w    #$10,a7
  992. L471
  993. ;            if(normal_knot->unified_knot)
  994.     move.l    a3,a1
  995.     tst.l    $8(a1)
  996.     beq.b    L473
  997. L472
  998. ;                collect_unified_knot(geom_knot,normal_knot,maximal_min_knot,
  999.     fmove.s    fp2,-(a7)
  1000.     fmove.s    fp3,-(a7)
  1001.     move.l    a3,-(a7)
  1002.     move.l    $C(a5),-(a7)
  1003.     jsr    _collect_unified_knot
  1004.     add.w    #$10,a7
  1005. L473
  1006. ;            if(texture_knot->unified_knot)
  1007.     move.l    a4,a1
  1008.     tst.l    $8(a1)
  1009.     beq.b    L475
  1010. L474
  1011. ;                collect_unified_knot(geom_knot,texture_knot,maximal_min_knot
  1012.     fmove.s    fp2,-(a7)
  1013.     fmove.s    fp3,-(a7)
  1014.     move.l    a4,-(a7)
  1015.     move.l    $C(a5),-(a7)
  1016.     jsr    _collect_unified_knot
  1017.     add.w    #$10,a7
  1018. L475
  1019. ;            if(color_knot->unified_knot)
  1020.     tst.l    $8(a2)
  1021.     beq.b    L477
  1022. L476
  1023. ;                collect_unified_knot(color_knot,geom_knot,maximal_min_knot,
  1024.     fmove.s    fp2,-(a7)
  1025.     fmove.s    fp3,-(a7)
  1026.     move.l    $C(a5),-(a7)
  1027.     move.l    a2,-(a7)
  1028.     jsr    _collect_unified_knot
  1029.     add.w    #$10,a7
  1030. L477
  1031. ;            if(normal_knot->unified_knot)
  1032.     move.l    a3,a1
  1033.     tst.l    $8(a1)
  1034.     beq.b    L479
  1035. L478
  1036. ;                collect_unified_knot(normal_knot,geom_knot,maximal_min_knot,
  1037.     fmove.s    fp2,-(a7)
  1038.     fmove.s    fp3,-(a7)
  1039.     move.l    $C(a5),-(a7)
  1040.     move.l    a3,-(a7)
  1041.     jsr    _collect_unified_knot
  1042.     add.w    #$10,a7
  1043. L479
  1044. ;            if(texture_knot->unified_knot)
  1045.     move.l    a4,a1
  1046.     tst.l    $8(a1)
  1047.     beq.b    L481
  1048. L480
  1049. ;                collect_unified_knot(texture_knot,geom_knot,maximal_min_knot
  1050.     fmove.s    fp2,-(a7)
  1051.     fmove.s    fp3,-(a7)
  1052.     move.l    $C(a5),-(a7)
  1053.     move.l    a4,-(a7)
  1054.     jsr    _collect_unified_knot
  1055.     add.w    #$10,a7
  1056. L481
  1057. ;    set_new_t_min_t_max(geom_knot,color_knot,normal_knot,texture_knot,
  1058.     fmove.s    fp2,-(a7)
  1059.     fmove.s    fp3,-(a7)
  1060.     move.l    a4,-(a7)
  1061.     move.l    a3,-(a7)
  1062.     move.l    a2,-(a7)
  1063.     move.l    $C(a5),-(a7)
  1064.     jsr    _set_new_t_min_t_max
  1065.     add.w    #$18,a7
  1066.     moveq    #0,d0
  1067.     fmovem.x (a7)+,fp2/fp3
  1068.     movem.l    (a7)+,d2/a2-a4
  1069.     unlk    a5
  1070.     rts
  1071.  
  1072.     SECTION "_free_unified_knots:0",CODE
  1073.  
  1074.  
  1075. ;void
  1076.     XDEF    _free_unified_knots
  1077. _free_unified_knots
  1078.     movem.l    a2-a4,-(a7)
  1079.     movem.l    $10(a7),a1/a4
  1080.     move.l    $1C(a7),a2
  1081.     move.l    $18(a7),a3
  1082. L483
  1083. ;    if(geom_knot->unified_knot)
  1084.     tst.l    $8(a1)
  1085.     beq.b    L485
  1086. L484
  1087. ;        free(geom_knot->unified_knot);
  1088.     move.l    $8(a1),-(a7)
  1089.     jsr    _free
  1090.     addq.w    #4,a7
  1091. L485
  1092. ;    if(color_knot->unified_knot)
  1093.     move.l    a4,a1
  1094.     tst.l    $8(a1)
  1095.     beq.b    L487
  1096. L486
  1097. ;        free(color_knot->unified_knot);
  1098.     move.l    a4,a1
  1099.     move.l    $8(a1),-(a7)
  1100.     jsr    _free
  1101.     addq.w    #4,a7
  1102. L487
  1103. ;    if(normal_knot->unified_knot)
  1104.     move.l    a3,a1
  1105.     tst.l    $8(a1)
  1106.     beq.b    L489
  1107. L488
  1108. ;        free(normal_knot->unified_knot);
  1109.     move.l    a3,a1
  1110.     move.l    $8(a1),-(a7)
  1111.     jsr    _free
  1112.     addq.w    #4,a7
  1113. L489
  1114. ;    if(texture_knot->unified_knot)
  1115.     tst.l    $8(a2)
  1116.     beq.b    L491
  1117. L490
  1118. ;        free(texture_knot->unified_knot);
  1119.     move.l    $8(a2),-(a7)
  1120.     jsr    _free
  1121.     addq.w    #4,a7
  1122. L491
  1123.     movem.l    (a7)+,a2-a4
  1124.     rts
  1125.  
  1126.     SECTION "_explode_knot:0",CODE
  1127.  
  1128.  
  1129. ;GLenum
  1130.     XDEF    _explode_knot
  1131. _explode_knot
  1132. L521    EQU    -$34
  1133.     link    a5,#L521
  1134.     movem.l    d2-d7/a2/a3,-(a7)
  1135.     fmovem.x fp2,-(a7)
  1136.     move.l    $8(a5),a3
  1137. L492
  1138. ;    GLint nknots,n_new_knots=0;
  1139.     moveq    #0,d7
  1140. ;    if(the_knot->unified_knot)
  1141.     move.l    a3,a1
  1142.     tst.l    $8(a1)
  1143.     beq.b    L494
  1144. L493
  1145. ;        knot=the_knot->unified_knot;
  1146.     move.l    a3,a0
  1147.     move.l    $8(a0),a2
  1148. ;        nknots=the_knot->unified_nknots;
  1149.     move.l    a3,a0
  1150.     move.l    $C(a0),-$C(a5)
  1151.     bra.b    L495
  1152. L494
  1153. ;        knot=the_knot->knot;
  1154.     move.l    a3,a0
  1155.     move.l    (a0),a2
  1156. ;        nknots=the_knot->nknots;
  1157.     move.l    a3,a0
  1158.     move.l    4(a0),-$C(a5)
  1159. L495
  1160. ;    ord=the_knot->order;
  1161.     move.l    a3,a0
  1162.     move.l    $10(a0),d4
  1163. ;    t_min=the_knot->t_min;
  1164.     move.l    a3,a0
  1165.     move.l    $14(a0),d6
  1166. ;    t_max=the_knot->t_max;
  1167.     move.l    a3,a0
  1168.     move.l    $18(a0),d5
  1169. ;    for(i=t_min;
  1170.     move.l    d6,d3
  1171.     bra.b    L503
  1172. L496
  1173. ;        tmp_float=knot[i];
  1174.     fmove.s    0(a2,d3.l*4),fp2
  1175. ;        for(j=0;
  1176.     moveq    #0,d2
  1177.     bra.b    L500
  1178. L497
  1179. ;            if(fabs(tmp_float-knot[i+j])>EPSILON)
  1180.     move.l    d3,d0
  1181.     add.l    d2,d0
  1182.     fmove.x    fp2,fp0
  1183.     fsub.s    0(a2,d0.l*4),fp0
  1184.     fmove.d    fp0,-(a7)
  1185.     jsr    _fabs__r
  1186.     addq.w    #$8,a7
  1187.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  1188.     fbole.b    L499
  1189. L498
  1190. ;                
  1191.     bra.b    L502
  1192. L499
  1193.     addq.l    #1,d2
  1194. L500
  1195.     cmp.l    d4,d2
  1196.     bge.b    L502
  1197. L501
  1198.     move.l    d3,d0
  1199.     add.l    d2,d0
  1200.     cmp.l    d5,d0
  1201.     ble.b    L497
  1202. L502
  1203. ;        n_new_knots+=ord-j;
  1204.     move.l    d4,d0
  1205.     sub.l    d2,d0
  1206.     move.l    d7,d1
  1207.     add.l    d0,d1
  1208.     move.l    d1,d7
  1209. ;        i+=j;
  1210.     add.l    d2,d3
  1211. L503
  1212.     cmp.l    d5,d3
  1213.     ble.b    L496
  1214. L504
  1215. ;    if((new_knot=(GLfloat *)malloc(sizeof(GLfloat)*(nknots+n_new_knots)
  1216.     move.l    -$C(a5),d0
  1217.     add.l    d7,d0
  1218.     moveq    #2,d1
  1219.     asl.l    d1,d0
  1220.     move.l    d0,-(a7)
  1221.     jsr    _malloc
  1222.     addq.w    #4,a7
  1223.     move.l    d0,a1
  1224.     cmp.w    #0,a1
  1225.     bne.b    L506
  1226. L505
  1227.     move.l    #$18A26,d0
  1228.     fmovem.x (a7)+,fp2
  1229.     movem.l    (a7)+,d2-d7/a2/a3
  1230.     unlk    a5
  1231.     rts
  1232. L506
  1233. ;    for(j=0;
  1234.     moveq    #0,d2
  1235.     bra.b    L508
  1236. L507
  1237. ;        new_knot[j]=knot[j];
  1238.     move.l    0(a2,d2.l*4),0(a1,d2.l*4)
  1239.     addq.l    #1,d2
  1240. L508
  1241.     cmp.l    d6,d2
  1242.     blt.b    L507
  1243. L509
  1244. ;    for(i=j;
  1245.     move.l    d2,d3
  1246.     bra.b    L516
  1247. L510
  1248. ;        tmp_float=knot[i];
  1249.     fmove.s    0(a2,d3.l*4),fp2
  1250. ;        for(k=0;
  1251.     moveq    #0,d0
  1252.     bra.b    L514
  1253. L511
  1254. ;            new_knot[j++]=knot[i];
  1255.     move.l    d2,d1
  1256.     addq.l    #1,d2
  1257.     move.l    0(a2,d3.l*4),0(a1,d1.l*4)
  1258. ;            if(tmp_float==knot[i+1])
  1259.     lea    4(a2),a0
  1260.     fcmp.s    0(a0,d3.l*4),fp2
  1261.     fbne.b    L513
  1262. L512
  1263. ;                i++;
  1264.     addq.l    #1,d3
  1265. L513
  1266.     addq.l    #1,d0
  1267. L514
  1268.     cmp.l    d4,d0
  1269.     blt.b    L511
  1270. L515
  1271.     addq.l    #1,d3
  1272. L516
  1273.     cmp.l    d5,d3
  1274.     ble.b    L510
  1275. L517
  1276. ;    for(i=t_max+1;
  1277.     move.l    d5,d3
  1278.     addq.l    #1,d3
  1279.     bra.b    L519
  1280. L518
  1281. ;        new_knot[j++]=knot[i];
  1282.     move.l    d2,d0
  1283.     addq.l    #1,d2
  1284.     move.l    0(a2,d3.l*4),0(a1,d0.l*4)
  1285.     addq.l    #1,d3
  1286. L519
  1287.     cmp.l    -$C(a5),d3
  1288.     blt.b    L518
  1289. L520
  1290. ;    the_knot->new_knot=new_knot;
  1291.     move.l    a3,a0
  1292.     move.l    a1,$22(a0)
  1293. ;    the_knot->delta_nknots+=n_new_knots;
  1294.     move.l    a3,a0
  1295.     move.l    $1C(a0),d0
  1296.     add.l    d7,d0
  1297.     move.l    a3,a0
  1298.     move.l    d0,$1C(a0)
  1299. ;    the_knot->t_max+=n_new_knots;
  1300.     move.l    a3,a0
  1301.     move.l    $18(a0),d0
  1302.     add.l    d7,d0
  1303.     move.l    a3,a0
  1304.     move.l    d0,$18(a0)
  1305.     moveq    #0,d0
  1306.     fmovem.x (a7)+,fp2
  1307.     movem.l    (a7)+,d2-d7/a2/a3
  1308.     unlk    a5
  1309.     rts
  1310.  
  1311.     SECTION "_calc_alphas:0",CODE
  1312.  
  1313.  
  1314. ;GLenum
  1315.     XDEF    _calc_alphas
  1316. _calc_alphas
  1317. L551    EQU    -$50
  1318.     link    a5,#L551
  1319.     movem.l    d2-d7/a2-a4,-(a7)
  1320.     fmovem.x fp2/fp3,-(a7)
  1321. L522
  1322. ;    knot=the_knot->knot;
  1323.     move.l    $8(a5),a0
  1324.     move.l    (a0),a2
  1325. ;    order=the_knot->order;
  1326.     move.l    $8(a5),a0
  1327.     move.l    $10(a0),-$1C(a5)
  1328. ;    new_knot=the_knot->new_knot;
  1329.     move.l    $8(a5),a0
  1330.     move.l    $22(a0),a3
  1331. ;    n=the_knot->nknots-the_knot->order;
  1332.     move.l    $8(a5),a0
  1333.     move.l    4(a0),d5
  1334.     move.l    $8(a5),a0
  1335.     sub.l    $10(a0),d5
  1336. ;    m=n+the_knot->delta_nknots;
  1337.     move.l    $8(a5),a0
  1338.     move.l    d5,d0
  1339.     add.l    $1C(a0),d0
  1340.     move.l    d0,d7
  1341. ;    if((alpha=(GLfloat *)malloc(sizeof(GLfloat)*n*m))==NULL)
  1342.     move.l    d5,d0
  1343.     moveq    #2,d1
  1344.     asl.l    d1,d0
  1345.     mulu.l    d7,d0
  1346.     move.l    d0,-(a7)
  1347.     jsr    _malloc
  1348.     addq.w    #4,a7
  1349.     move.l    d0,a4
  1350.     move.l    a4,a0
  1351.     cmp.w    #0,a0
  1352.     bne.b    L524
  1353. L523
  1354.     move.l    #$18A26,d0
  1355.     fmovem.x (a7)+,fp2/fp3
  1356.     movem.l    (a7)+,d2-d7/a2-a4
  1357.     unlk    a5
  1358.     rts
  1359. L524
  1360. ;    if((alpha_new=(GLfloat *)malloc(sizeof(GLfloat)*n*m))==NULL)
  1361.     move.l    d5,d0
  1362.     moveq    #2,d1
  1363.     asl.l    d1,d0
  1364.     mulu.l    d7,d0
  1365.     move.l    d0,-(a7)
  1366.     jsr    _malloc
  1367.     addq.w    #4,a7
  1368.     move.l    d0,-$24(a5)
  1369.     move.l    -$24(a5),a0
  1370.     cmp.w    #0,a0
  1371.     bne.b    L526
  1372. L525
  1373. ;        free(alpha);
  1374.     move.l    a4,-(a7)
  1375.     jsr    _free
  1376.     addq.w    #4,a7
  1377.     move.l    #$18A26,d0
  1378.     fmovem.x (a7)+,fp2/fp3
  1379.     movem.l    (a7)+,d2-d7/a2-a4
  1380.     unlk    a5
  1381.     rts
  1382. L526
  1383. ;    for(j=0;
  1384.     moveq    #0,d3
  1385.     bra.b    L535
  1386. L527
  1387. ;        for(i=0;
  1388.     moveq    #0,d2
  1389.     bra.b    L533
  1390. L528
  1391. ;            if((knot[i] <= new_knot[j]) && (new_knot[j] < knot[i+1]))
  1392.     fmove.s    0(a2,d2.l*4),fp1
  1393.     fcmp.s    0(a3,d3.l*4),fp1
  1394.     fbogt.b    L531
  1395. L529
  1396.     lea    4(a2),a0
  1397.     fmove.s    0(a3,d3.l*4),fp1
  1398.     fcmp.s    0(a0,d2.l*4),fp1
  1399.     fboge.b    L531
  1400. L530
  1401. ;                tmp_float=1.0;
  1402.     fmove.s    #$.3F800000,fp2
  1403.     bra.b    L532
  1404. L531
  1405. ;                tmp_float=0.0;
  1406.     fmove.s    #$.00000000,fp2
  1407. L532
  1408. ;            alpha[i+j*n]=tmp_float;
  1409.     move.l    d3,d0
  1410.     muls.l    d5,d0
  1411.     add.l    d2,d0
  1412.     fmove.s    fp2,0(a4,d0.l*4)
  1413.     addq.l    #1,d2
  1414. L533
  1415.     cmp.l    d5,d2
  1416.     blt.b    L528
  1417. L534
  1418.     addq.l    #1,d3
  1419. L535
  1420.     cmp.l    d7,d3
  1421.     blt.b    L527
  1422. L536
  1423. ;    for(k=1;
  1424.     moveq    #1,d4
  1425.     bra    L549
  1426. L537
  1427. ;        for(j=0;
  1428.     moveq    #0,d3
  1429.     bra    L547
  1430. L538
  1431. ;            for(i=0;
  1432.     moveq    #0,d2
  1433.     bra    L545
  1434. L539
  1435. ;                denom=knot[i+k]-knot[i];
  1436.     move.l    d2,d0
  1437.     add.l    d4,d0
  1438.     fmove.s    0(a2,d0.l*4),fp3
  1439.     fsub.s    0(a2,d2.l*4),fp3
  1440. ;                if(fabs(denom)<EPSILON)
  1441.     fmove.x    fp3,fp0
  1442.     fmove.d    fp0,-(a7)
  1443.     jsr    _fabs__r
  1444.     addq.w    #$8,a7
  1445.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  1446.     fboge.b    L541
  1447. L540
  1448. ;                    tmp_float=0.0;
  1449.     fmove.s    #$.00000000,fp2
  1450.     bra.b    L542
  1451. L541
  1452. ;                    tmp_float=(new_knot[j+k]-knot[i])/denom*
  1453.     move.l    d3,d0
  1454.     add.l    d4,d0
  1455.     fmove.s    0(a3,d0.l*4),fp2
  1456.     fsub.s    0(a2,d2.l*4),fp2
  1457.     fdiv.x    fp3,fp2
  1458.     move.l    d3,d0
  1459.     muls.l    d5,d0
  1460.     add.l    d2,d0
  1461.     fmul.s    0(a4,d0.l*4),fp2
  1462. L542
  1463. ;                denom=knot[i+k+1]-knot[i+1];
  1464.     move.l    d2,d0
  1465.     add.l    d4,d0
  1466.     lea    4(a2),a0
  1467.     fmove.s    0(a0,d0.l*4),fp3
  1468.     lea    4(a2),a0
  1469.     fsub.s    0(a0,d2.l*4),fp3
  1470. ;                if(fabs(denom)>EPSILON)
  1471.     fmove.x    fp3,fp0
  1472.     fmove.d    fp0,-(a7)
  1473.     jsr    _fabs__r
  1474.     addq.w    #$8,a7
  1475.     fcmp.d    #$.3EB0C6F7.A0B5ED8D,fp0
  1476.     fbole.b    L544
  1477. L543
  1478. ;                    tmp_float+=(knot[i+k+1]-new_knot[j+k])/denom*
  1479.     move.l    d2,d0
  1480.     add.l    d4,d0
  1481.     lea    4(a2),a0
  1482.     fmove.s    0(a0,d0.l*4),fp0
  1483.     move.l    d3,d0
  1484.     add.l    d4,d0
  1485.     fsub.s    0(a3,d0.l*4),fp0
  1486.     fdiv.x    fp3,fp0
  1487.     move.l    d2,d0
  1488.     addq.l    #1,d0
  1489.     move.l    d3,d1
  1490.     muls.l    d5,d1
  1491.     add.l    d1,d0
  1492.     fmul.s    0(a4,d0.l*4),fp0
  1493.     fadd.x    fp0,fp2
  1494. L544
  1495. ;                alpha_new[i+j*n]=tmp_float;
  1496.     move.l    d3,d0
  1497.     muls.l    d5,d0
  1498.     add.l    d2,d0
  1499.     move.l    -$24(a5),a1
  1500.     fmove.s    fp2,0(a1,d0.l*4)
  1501.     addq.l    #1,d2
  1502. L545
  1503.     cmp.l    d5,d2
  1504.     blt    L539
  1505. L546
  1506.     addq.l    #1,d3
  1507. L547
  1508.     cmp.l    d7,d3
  1509.     blt    L538
  1510. L548
  1511. ;        tmp_alpha=alpha_new;
  1512.     move.l    -$24(a5),a0
  1513. ;        alpha_new=alpha;
  1514.     move.l    a4,-$24(a5)
  1515. ;        alpha=tmp_alpha;
  1516.     move.l    a0,a4
  1517.     addq.l    #1,d4
  1518. L549
  1519.     cmp.l    -$1C(a5),d4
  1520.     blt    L537
  1521. L550
  1522. ;    the_knot->alpha=alpha;
  1523.     move.l    $8(a5),a1
  1524.     move.l    a4,$26(a1)
  1525. ;    free(alpha_new);
  1526.     move.l    -$24(a5),-(a7)
  1527.     jsr    _free
  1528.     addq.w    #4,a7
  1529.     moveq    #0,d0
  1530.     fmovem.x (a7)+,fp2/fp3
  1531.     movem.l    (a7)+,d2-d7/a2-a4
  1532.     unlk    a5
  1533.     rts
  1534.  
  1535.     SECTION "_calc_new_ctrl_pts:0",CODE
  1536.  
  1537.  
  1538. ;GLenum
  1539.     XDEF    _calc_new_ctrl_pts
  1540. _calc_new_ctrl_pts
  1541. L567    EQU    -$44
  1542.     link    a5,#L567
  1543.     movem.l    d2-d7/a2-a4,-(a7)
  1544.     movem.l    $14(a5),d2/a2
  1545.     move.l    $10(a5),a0
  1546.     move.l    $8(a5),a4
  1547. L552
  1548. ;    new_knot=the_knot->new_knot;
  1549. ;    n=the_knot->nknots-the_knot->order;
  1550.     move.l    4(a0),-$18(a5)
  1551.     move.l    -$18(a5),d0
  1552.     sub.l    $10(a0),d0
  1553.     move.l    d0,-$18(a5)
  1554. ;    alpha=the_knot->alpha;
  1555.     move.l    $26(a0),a3
  1556. ;    m=the_knot->t_max+1-the_knot->t_min-the_knot->order;
  1557.     move.l    $18(a0),-$14(a5)
  1558.     addq.l    #1,-$14(a5)
  1559.     move.l    -$14(a5),d0
  1560.     sub.l    $14(a0),d0
  1561.     move.l    d0,-$14(a5)
  1562.     move.l    -$14(a5),d0
  1563.     sub.l    $10(a0),d0
  1564.     move.l    d0,-$14(a5)
  1565. ;    k=the_knot->t_min;
  1566.     move.l    $14(a0),-$C(a5)
  1567. ;    if((*new_ctrl=(GLfloat *)malloc(sizeof(GLfloat)*dim*m))==NULL)
  1568.     move.l    d2,d0
  1569.     moveq    #2,d1
  1570.     asl.l    d1,d0
  1571.     mulu.l    -$14(a5),d0
  1572.     move.l    d0,-(a7)
  1573.     jsr    _malloc
  1574.     addq.w    #4,a7
  1575.     move.l    d0,(a2)
  1576.     move.l    d0,a0
  1577.     cmp.w    #0,a0
  1578.     bne.b    L554
  1579. L553
  1580.     move.l    #$18A26,d0
  1581.     movem.l    (a7)+,d2-d7/a2-a4
  1582.     unlk    a5
  1583.     rts
  1584. L554
  1585. ;    for(j=0;
  1586.     moveq    #0,d3
  1587.     bra.b    L565
  1588. L555
  1589. ;        for(l=0;
  1590.     moveq    #0,d0
  1591.     bra.b    L557
  1592. L556
  1593. ;            (*new_ctrl)[j*dim+l]=0.0;
  1594.     move.l    d3,d1
  1595.     muls.l    d2,d1
  1596.     add.l    d0,d1
  1597.     move.l    (a2),a0
  1598.     clr.l    0(a0,d1.l*4)
  1599.     addq.l    #1,d0
  1600. L557
  1601.     cmp.l    d2,d0
  1602.     blt.b    L556
  1603. L558
  1604. ;        for(i=0;
  1605.     moveq    #0,d4
  1606.     bra.b    L563
  1607. L559
  1608. ;            index1=i+(j+k)*n;
  1609.     move.l    d3,d0
  1610.     add.l    -$C(a5),d0
  1611.     muls.l    -$18(a5),d0
  1612.     move.l    d4,d1
  1613.     add.l    d0,d1
  1614.     move.l    d1,d7
  1615. ;            index2=i*stride;
  1616.     move.l    d4,d5
  1617.     muls.l    $C(a5),d5
  1618. ;            for(l=0;
  1619.     moveq    #0,d0
  1620.     bra.b    L561
  1621. L560
  1622. ;                (*new_ctrl)[j*dim+l]+=alpha[index1]*ctrl[index2+l];
  1623.     move.l    d7,d1
  1624.     fmove.s    0(a3,d1.l*4),fp1
  1625.     move.l    d5,d1
  1626.     add.l    d0,d1
  1627.     fmul.s    0(a4,d1.l*4),fp1
  1628.     move.l    d3,d1
  1629.     muls.l    d2,d1
  1630.     add.l    d0,d1
  1631.     move.l    (a2),a0
  1632.     lea    0(a0,d1.l*4),a0
  1633.     fmove.s    (a0),fp0
  1634.     fadd.x    fp1,fp0
  1635.     fmove.s    fp0,(a0)
  1636.     addq.l    #1,d0
  1637. L561
  1638.     cmp.l    d2,d0
  1639.     blt.b    L560
  1640. L562
  1641.     addq.l    #1,d4
  1642. L563
  1643.     cmp.l    -$18(a5),d4
  1644.     blt.b    L559
  1645. L564
  1646.     addq.l    #1,d3
  1647. L565
  1648.     cmp.l    -$14(a5),d3
  1649.     blt    L555
  1650. L566
  1651. ;    *ncontrol=(GLint)m;
  1652.     move.l    $1C(a5),a0
  1653.     move.l    -$14(a5),(a0)
  1654.     moveq    #0,d0
  1655.     movem.l    (a7)+,d2-d7/a2-a4
  1656.     unlk    a5
  1657.     rts
  1658.  
  1659.     SECTION "_calc_factor:0",CODE
  1660.  
  1661.  
  1662. ;    GLfloat bez_pt[4];
  1663. _calc_factor
  1664. L587    EQU    -$174
  1665.     link    a5,#L587
  1666.     movem.l    d2-d6/a2,-(a7)
  1667.     fmovem.x fp2/fp3/fp4/fp5,-(a7)
  1668.     movem.l    $10(a5),d3/d4
  1669.     move.l    $C(a5),d5
  1670.     move.l    $1C(a5),d6
  1671.     move.l    $8(a5),a2
  1672.     fmove.s    $18(a5),fp5
  1673. L568
  1674. ;    glGetDoublev(GL_MODELVIEW_MATRIX,model);
  1675.     pea    -$80(a5)
  1676.     pea    $BA6.w
  1677.     jsr    _glGetDoublev
  1678.     addq.w    #$8,a7
  1679. ;    glGetDoublev(GL_PROJECTION_MATRIX,proj);
  1680.     pea    -$100(a5)
  1681.     pea    $BA7.w
  1682.     jsr    _glGetDoublev
  1683.     addq.w    #$8,a7
  1684. ;    glGetIntegerv(GL_VIEWPORT,viewport);
  1685.     pea    -$110(a5)
  1686.     pea    $BA2.w
  1687.     jsr    _glGetIntegerv
  1688.     addq.w    #$8,a7
  1689. ;    if(dim==4)
  1690.     move.l    d6,d0
  1691.     cmp.l    #4,d0
  1692.     bne    L575
  1693. L569
  1694. ;        w=(GLdouble)pts[indx+3];
  1695.     lea    $C(a2),a0
  1696.     fmove.s    0(a0,d3.l*4),fp0
  1697.     fmove.x    fp0,fp4
  1698. ;        x=(GLdouble)pts[indx]/w;
  1699.     fmove.s    0(a2,d3.l*4),fp0
  1700.     fmove.x    fp0,fp2
  1701.     fdiv.x    fp4,fp2
  1702. ;        y=(GLdouble)pts[indx+1]/w;
  1703.     lea    4(a2),a0
  1704.     fmove.s    0(a0,d3.l*4),fp0
  1705.     fmove.x    fp0,fp1
  1706.     fdiv.x    fp4,fp1
  1707. ;        z=(GLdouble)pts[indx+2]/w;
  1708.     lea    $8(a2),a0
  1709.     fmove.s    0(a0,d3.l*4),fp0
  1710.     fdiv.x    fp4,fp0
  1711. ;        gluProject(x,y,z,model,proj,viewport,&winx1,&winy1,&winz);
  1712.     pea    -$148(a5)
  1713.     pea    -$140(a5)
  1714.     pea    -$138(a5)
  1715.     pea    -$110(a5)
  1716.     pea    -$100(a5)
  1717.     pea    -$80(a5)
  1718.     fmove.d    fp0,-(a7)
  1719.     fmove.d    fp1,-(a7)
  1720.     fmove.d    fp2,-(a7)
  1721.     jsr    _gluProject
  1722.     add.w    #$30,a7
  1723. ;        len=0.0;
  1724.     fmove.d    #$.00000000.00000000,fp3
  1725. ;        for(i=1;
  1726.     moveq    #1,d2
  1727.     bra    L573
  1728. L570
  1729. ;            w=(GLdouble)pts[indx+i*stride+3];
  1730.     move.l    d2,d0
  1731.     muls.l    d4,d0
  1732.     add.l    d3,d0
  1733.     lea    $C(a2),a0
  1734.     fmove.s    0(a0,d0.l*4),fp0
  1735.     fmove.x    fp0,fp4
  1736. ;            x=(GLdouble)pts[indx+i*stride]/w;
  1737.     move.l    d2,d0
  1738.     muls.l    d4,d0
  1739.     add.l    d3,d0
  1740.     fmove.s    0(a2,d0.l*4),fp0
  1741.     fmove.x    fp0,fp2
  1742.     fdiv.x    fp4,fp2
  1743. ;            y=(GLdouble)pts[indx+i*stride+1]/w;
  1744.     move.l    d2,d0
  1745.     muls.l    d4,d0
  1746.     add.l    d3,d0
  1747.     lea    4(a2),a0
  1748.     fmove.s    0(a0,d0.l*4),fp0
  1749.     fmove.x    fp0,fp1
  1750.     fdiv.x    fp4,fp1
  1751. ;            z=(GLdouble)pts[indx+i*stride+2]/w;
  1752.     move.l    d2,d0
  1753.     muls.l    d4,d0
  1754.     add.l    d3,d0
  1755.     lea    $8(a2),a0
  1756.     fmove.s    0(a0,d0.l*4),fp0
  1757.     fdiv.x    fp4,fp0
  1758. ;            if(gluProject(x,y,z,model,proj,viewport,&winx2,&winy2,&winz))
  1759.     pea    -$148(a5)
  1760.     pea    -$158(a5)
  1761.     pea    -$150(a5)
  1762.     pea    -$110(a5)
  1763.     pea    -$100(a5)
  1764.     pea    -$80(a5)
  1765.     fmove.d    fp0,-(a7)
  1766.     fmove.d    fp1,-(a7)
  1767.     fmove.d    fp2,-(a7)
  1768.     jsr    _gluProject
  1769.     add.w    #$30,a7
  1770.     tst.l    d0
  1771.     beq.b    L572
  1772. L571
  1773. ;                dx=winx2-winx1;
  1774.     fmove.d    -$150(a5),fp0
  1775.     fsub.d    -$138(a5),fp0
  1776. ;                dy=winy2-winy1;
  1777.     fmove.d    -$158(a5),fp1
  1778.     fsub.d    -$140(a5),fp1
  1779. ;                len+=sqrt(dx*dx+dy*dy);
  1780.     fmove.x    fp0,fp2
  1781.     fmul.x    fp0,fp2
  1782.     fmove.x    fp2,fp0
  1783.     fmove.x    fp1,fp2
  1784.     fmul.x    fp1,fp2
  1785.     fadd.x    fp2,fp0
  1786.     fmove.d    fp0,-(a7)
  1787.     jsr    _sqrt__r
  1788.     addq.w    #$8,a7
  1789.     fadd.x    fp0,fp3
  1790. L572
  1791. ;            winx1=winx2;
  1792.     move.l    -$150(a5),-$138(a5)
  1793.     move.l    -$14C(a5),-$134(a5)
  1794. ; winy1=winy2;
  1795.     move.l    -$158(a5),-$140(a5)
  1796.     move.l    -$154(a5),-$13C(a5)
  1797.     addq.l    #1,d2
  1798. L573
  1799.     cmp.l    d5,d2
  1800.     blt    L570
  1801. L574
  1802.     bra    L586
  1803. L575
  1804. ;        x=(GLdouble)pts[indx];
  1805.     fmove.s    0(a2,d3.l*4),fp0
  1806.     fmove.x    fp0,fp2
  1807. ;        y=(GLdouble)pts[indx+1];
  1808.     lea    4(a2),a0
  1809.     fmove.s    0(a0,d3.l*4),fp0
  1810.     fmove.x    fp0,fp1
  1811. ;        if(dim==2)
  1812.     move.l    d6,d0
  1813.     cmp.l    #2,d0
  1814.     bne.b    L577
  1815. L576
  1816. ;            z=0.0;
  1817.     fmove.d    #$.00000000.00000000,fp0
  1818.     bra.b    L578
  1819. L577
  1820. ;            z=(GLdouble)pts[indx+2];
  1821.     lea    $8(a2),a0
  1822.     fmove.s    0(a0,d3.l*4),fp0
  1823. L578
  1824. ;        gluProject(x,y,z,model,proj,viewport,&winx1,&winy1,&winz);
  1825.     pea    -$148(a5)
  1826.     pea    -$140(a5)
  1827.     pea    -$138(a5)
  1828.     pea    -$110(a5)
  1829.     pea    -$100(a5)
  1830.     pea    -$80(a5)
  1831.     fmove.d    fp0,-(a7)
  1832.     fmove.d    fp1,-(a7)
  1833.     fmove.d    fp2,-(a7)
  1834.     jsr    _gluProject
  1835.     add.w    #$30,a7
  1836. ;        len=0.0;
  1837.     fmove.d    #$.00000000.00000000,fp3
  1838. ;        for(i=1;
  1839.     moveq    #1,d2
  1840.     bra    L585
  1841. L579
  1842. ;            x=(GLdouble)pts[indx+i*stride];
  1843.     move.l    d2,d0
  1844.     muls.l    d4,d0
  1845.     add.l    d3,d0
  1846.     fmove.s    0(a2,d0.l*4),fp0
  1847.     fmove.x    fp0,fp2
  1848. ;            y=(GLdouble)pts[indx+i*stride+1];
  1849.     move.l    d2,d0
  1850.     muls.l    d4,d0
  1851.     add.l    d3,d0
  1852.     lea    4(a2),a0
  1853.     fmove.s    0(a0,d0.l*4),fp0
  1854.     fmove.x    fp0,fp1
  1855. ;            if(dim==2)
  1856.     move.l    d6,d0
  1857.     cmp.l    #2,d0
  1858.     bne.b    L581
  1859. L580
  1860. ;                z=0.0;
  1861.     fmove.d    #$.00000000.00000000,fp0
  1862.     bra.b    L582
  1863. L581
  1864. ;                z=(GLdouble)pts[indx+i*stride+2];
  1865.     move.l    d2,d0
  1866.     muls.l    d4,d0
  1867.     add.l    d3,d0
  1868.     lea    $8(a2),a0
  1869.     fmove.s    0(a0,d0.l*4),fp0
  1870. L582
  1871. ;            if(gluProject(x,y,z,model,proj,viewport,&winx2,&winy2,&winz))
  1872.     pea    -$148(a5)
  1873.     pea    -$158(a5)
  1874.     pea    -$150(a5)
  1875.     pea    -$110(a5)
  1876.     pea    -$100(a5)
  1877.     pea    -$80(a5)
  1878.     fmove.d    fp0,-(a7)
  1879.     fmove.d    fp1,-(a7)
  1880.     fmove.d    fp2,-(a7)
  1881.     jsr    _gluProject
  1882.     add.w    #$30,a7
  1883.     tst.l    d0
  1884.     beq.b    L584
  1885. L583
  1886. ;                dx=winx2-winx1;
  1887.     fmove.d    -$150(a5),fp0
  1888.     fsub.d    -$138(a5),fp0
  1889. ;                dy=winy2-winy1;
  1890.     fmove.d    -$158(a5),fp1
  1891.     fsub.d    -$140(a5),fp1
  1892. ;                len+=sqrt(dx*dx+dy*dy);
  1893.     fmove.x    fp0,fp2
  1894.     fmul.x    fp0,fp2
  1895.     fmove.x    fp2,fp0
  1896.     fmove.x    fp1,fp2
  1897.     fmul.x    fp1,fp2
  1898.     fadd.x    fp2,fp0
  1899.     fmove.d    fp0,-(a7)
  1900.     jsr    _sqrt__r
  1901.     addq.w    #$8,a7
  1902.     fadd.x    fp0,fp3
  1903. L584
  1904. ;            winx1=winx2;
  1905.     move.l    -$150(a5),-$138(a5)
  1906.     move.l    -$14C(a5),-$134(a5)
  1907. ; winy1=winy2;
  1908.     move.l    -$158(a5),-$140(a5)
  1909.     move.l    -$154(a5),-$13C(a5)
  1910.     addq.l    #1,d2
  1911. L585
  1912.     cmp.l    d5,d2
  1913.     blt    L579
  1914. L586
  1915. ;    len /= tolerance;
  1916.     fmove.x    fp5,fp0
  1917.     fdiv.x    fp0,fp3
  1918.     fmove.l    fp3,d0
  1919.     addq.l    #1,d0
  1920.     fmovem.x (a7)+,fp2/fp3/fp4/fp5
  1921.     movem.l    (a7)+,d2-d6/a2
  1922.     unlk    a5
  1923.     rts
  1924.  
  1925.     SECTION "_bezier_curve:0",CODE
  1926.  
  1927.  
  1928. ;static void
  1929. _bezier_curve
  1930.     movem.l    d2-d6/a2,-(a7)
  1931.     fmovem.x fp2/fp3/fp4/fp5,-(a7)
  1932.     movem.l    $58(a7),d2/d4/d5
  1933.     move.l    $50(a7),a0
  1934.     move.l    $4C(a7),a1
  1935.     fmove.s    $54(a7),fp5
  1936. L588
  1937. ;    if(order >= 2)
  1938.     cmp.l    #2,d4
  1939.     blo    L599
  1940. L589
  1941. ;        bincoeff = order-1;
  1942.     move.l    d4,d1
  1943.     subq.l    #1,d1
  1944. ;        s = 1.0-t;
  1945.     fmove.x    fp5,fp0
  1946.     fmove.d    #$.3FF00000.00000000,fp1
  1947.     fsub.x    fp0,fp1
  1948.     fmove.x    fp1,fp0
  1949.     fmove.x    fp0,fp4
  1950. ;        for(k=0;
  1951.     moveq    #0,d0
  1952.     bra.b    L591
  1953. L590
  1954. ;            out[k] = s*cp[k] + bincoeff*t*cp[offset+k];
  1955.     fmove.x    fp4,fp1
  1956.     fmul.s    0(a1,d0.l*4),fp1
  1957.     fmove.l    d1,fp0
  1958.     fmul.x    fp5,fp0
  1959.     move.l    d5,d3
  1960.     add.l    d0,d3
  1961.     fmul.s    0(a1,d3.l*4),fp0
  1962.     fadd.x    fp0,fp1
  1963.     fmove.s    fp1,0(a0,d0.l*4)
  1964.     addq.l    #1,d0
  1965. L591
  1966.     cmp.l    d2,d0
  1967.     blo.b    L590
  1968. L592
  1969. ;        for(i=2, cp+=2*offset, powert=t*t;
  1970.     moveq    #2,d3
  1971.     move.l    d5,d0
  1972.     moveq    #1,d6
  1973.     asl.l    d6,d0
  1974.     moveq    #2,d6
  1975.     asl.l    d6,d0
  1976.     add.l    d0,a1
  1977.     fmove.x    fp5,fp3
  1978.     fmul.x    fp5,fp3
  1979.     bra.b    L597
  1980. L593
  1981. ;            bincoeff *= order-i;
  1982.     move.l    d4,d0
  1983.     sub.l    d3,d0
  1984.     mulu.l    d0,d1
  1985. ;            bincoeff /= i;
  1986.     divul.l    d3,d1
  1987. ;            for(k=0;
  1988.     moveq    #0,d0
  1989.     bra.b    L595
  1990. L594
  1991. ;                out[k] = s*out[k] + bincoeff*powert*cp[k];
  1992.     fmove.x    fp4,fp1
  1993.     fmul.s    0(a0,d0.l*4),fp1
  1994.     fmove.l    d1,fp0
  1995.     fmul.x    fp3,fp0
  1996.     fmul.s    0(a1,d0.l*4),fp0
  1997.     fadd.x    fp0,fp1
  1998.     fmove.s    fp1,0(a0,d0.l*4)
  1999.     addq.l    #1,d0
  2000. L595
  2001.     cmp.l    d2,d0
  2002.     blo.b    L594
  2003. L596
  2004.     addq.l    #1,d3
  2005.     fmul.x    fp5,fp3
  2006.     move.l    d5,d0
  2007.     moveq    #2,d6
  2008.     asl.l    d6,d0
  2009.     add.l    d0,a1
  2010. L597
  2011.     cmp.l    d4,d3
  2012.     blo.b    L593
  2013. L598
  2014.     bra.b    L602
  2015. L599
  2016. ;        for(k=0;
  2017.     moveq    #0,d0
  2018.     bra.b    L601
  2019. L600
  2020. ;            out[k] = cp[k];
  2021.     move.l    0(a1,d0.l*4),0(a0,d0.l*4)
  2022.     addq.l    #1,d0
  2023. L601
  2024.     cmp.l    d2,d0
  2025.     blo.b    L600
  2026. L602
  2027.     fmovem.x (a7)+,fp2/fp3/fp4/fp5
  2028.     movem.l    (a7)+,d2-d6/a2
  2029.     rts
  2030.  
  2031.     SECTION "_calc_parametric_factor:0",CODE
  2032.  
  2033.  
  2034. ;static GLint
  2035. _calc_parametric_factor
  2036. L625    EQU    -$1A8
  2037.     link    a5,#L625
  2038.     movem.l    d2-d6/a2,-(a7)
  2039.     fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
  2040.     move.l    $1C(a5),d2
  2041.     move.l    $C(a5),d4
  2042.     move.l    $10(a5),d5
  2043.     move.l    $14(a5),d6
  2044.     move.l    $8(a5),a2
  2045. L603
  2046. ;    GLdouble len=0.0
  2047.     fmove.d    #$.00000000.00000000,fp7
  2048. ;    P = 2*(order+2);
  2049.     move.l    d4,d0
  2050.     addq.l    #2,d0
  2051.     move.l    d0,d3
  2052.     moveq    #1,d0
  2053.     asl.l    d0,d3
  2054. ;    glGetDoublev(GL_MODELVIEW_MATRIX,model);
  2055.     pea    -$80(a5)
  2056.     pea    $BA6.w
  2057.     jsr    _glGetDoublev
  2058.     addq.w    #$8,a7
  2059. ;    glGetDoublev(GL_PROJECTION_MATRIX,proj);
  2060.     pea    -$100(a5)
  2061.     pea    $BA7.w
  2062.     jsr    _glGetDoublev
  2063.     addq.w    #$8,a7
  2064. ;    glGetIntegerv(GL_VIEWPORT,viewport);
  2065.     pea    -$110(a5)
  2066.     pea    $BA2.w
  2067.     jsr    _glGetIntegerv
  2068.     addq.w    #$8,a7
  2069. ;    z_med = (viewport[2] + viewport[3]) * 0.5;
  2070.     lea    -$110(a5),a0
  2071.     move.l    $8(a0),d0
  2072.     lea    -$110(a5),a0
  2073.     add.l    $C(a0),d0
  2074.     fmove.l    d0,fp5
  2075.     fmul.d    #$.3FE00000.00000000,fp5
  2076. ;    switch(dim)
  2077.     cmp.l    #3,d2
  2078.     beq    L610
  2079.     bgt.b    L626
  2080.     cmp.l    #2,d2
  2081.     beq    L616
  2082.     bra    L622
  2083. L626
  2084.     cmp.l    #4,d2
  2085.     beq.b    L604
  2086.     bra    L622
  2087. ;        
  2088. L604
  2089. ;            for(i=1;
  2090.     moveq    #1,d2
  2091.     bra    L608
  2092. L605
  2093. ;                bezier_curve(pts+indx, bez_pt, (GLfloat)i/(GLfloat)P, 4,
  2094.     move.l    d6,-(a7)
  2095.     move.l    d4,-(a7)
  2096.     pea    4.w
  2097.     fmove.l    d2,fp0
  2098.     fmove.l    d3,fp1
  2099.     fdiv.x    fp1,fp0
  2100.     fmove.s    fp0,-(a7)
  2101.     pea    -$190(a5)
  2102.     pea    0(a2,d5.l*4)
  2103.     jsr    _bezier_curve
  2104.     add.w    #$18,a7
  2105. ;                w = (GLdouble)bez_pt[3];
  2106.     lea    -$190(a5),a0
  2107.     fmove.s    $C(a0),fp0
  2108. ;                x = (GLdouble)bez_pt[0] / w;
  2109.     fmove.s    -$190(a5),fp1
  2110.     fmove.x    fp1,fp2
  2111.     fdiv.x    fp0,fp2
  2112. ;                y = (GLdouble)bez_pt[1] / w;
  2113.     lea    -$190(a5),a0
  2114.     fmove.s    4(a0),fp1
  2115.     fmove.x    fp1,fp4
  2116.     fdiv.x    fp0,fp4
  2117. ;                z = (GLdouble)bez_pt[2] / w;
  2118.     lea    -$190(a5),a0
  2119.     fmove.s    $8(a0),fp1
  2120.     fmove.x    fp1,fp3
  2121.     fdiv.x    fp0,fp3
  2122. ;                gluProject(x,y,z,model,proj,viewport,&x3,&y3,&z3);
  2123.     pea    -$178(a5)
  2124.     pea    -$170(a5)
  2125.     pea    -$168(a5)
  2126.     pea    -$110(a5)
  2127.     pea    -$100(a5)
  2128.     pea    -$80(a5)
  2129.     fmove.d    fp3,-(a7)
  2130.     fmove.d    fp4,-(a7)
  2131.     fmove.d    fp2,-(a7)
  2132.     jsr    _gluProject
  2133.     add.w    #$30,a7
  2134. ;                z3 *= z_med;
  2135.     fmove.d    -$178(a5),fp0
  2136.     fmul.x    fp5,fp0
  2137.     fmove.d    fp0,-$178(a5)
  2138. ;                bezier_curve(pts+indx, bez_pt, (GLfloat)(i-1)/(GLfloat)P, 4,
  2139.     move.l    d6,-(a7)
  2140.     move.l    d4,-(a7)
  2141.     pea    4.w
  2142.     move.l    d2,d0
  2143.     subq.l    #1,d0
  2144.     fmove.l    d0,fp0
  2145.     fmove.l    d3,fp1
  2146.     fdiv.x    fp1,fp0
  2147.     fmove.s    fp0,-(a7)
  2148.     pea    -$190(a5)
  2149.     pea    0(a2,d5.l*4)
  2150.     jsr    _bezier_curve
  2151.     add.w    #$18,a7
  2152. ;                w = (GLdouble)bez_pt[3];
  2153.     lea    -$190(a5),a0
  2154.     fmove.s    $C(a0),fp0
  2155. ;                x = (GLdouble)bez_pt[0] / w;
  2156.     fmove.s    -$190(a5),fp1
  2157.     fmove.x    fp1,fp2
  2158.     fdiv.x    fp0,fp2
  2159. ;                y = (GLdouble)bez_pt[1] / w;
  2160.     lea    -$190(a5),a0
  2161.     fmove.s    4(a0),fp1
  2162.     fmove.x    fp1,fp4
  2163.     fdiv.x    fp0,fp4
  2164. ;                z = (GLdouble)bez_pt[2] / w;
  2165.     lea    -$190(a5),a0
  2166.     fmove.s    $8(a0),fp1
  2167.     fmove.x    fp1,fp3
  2168.     fdiv.x    fp0,fp3
  2169. ;                gluProject(x,y,z,model,proj,viewport,&x1,&y1,&z1);
  2170.     pea    -$148(a5)
  2171.     pea    -$140(a5)
  2172.     pea    -$138(a5)
  2173.     pea    -$110(a5)
  2174.     pea    -$100(a5)
  2175.     pea    -$80(a5)
  2176.     fmove.d    fp3,-(a7)
  2177.     fmove.d    fp4,-(a7)
  2178.     fmove.d    fp2,-(a7)
  2179.     jsr    _gluProject
  2180.     add.w    #$30,a7
  2181. ;                z1 *= z_med;
  2182.     fmove.d    -$148(a5),fp0
  2183.     fmul.x    fp5,fp0
  2184.     fmove.d    fp0,-$148(a5)
  2185. ;                bezier_curve(pts+indx, bez_pt, (GLfloat)(i+1)/(GLfloat)P, 4,
  2186.     move.l    d6,-(a7)
  2187.     move.l    d4,-(a7)
  2188.     pea    4.w
  2189.     move.l    d2,d0
  2190.     addq.l    #1,d0
  2191.     fmove.l    d0,fp0
  2192.     fmove.l    d3,fp1
  2193.     fdiv.x    fp1,fp0
  2194.     fmove.s    fp0,-(a7)
  2195.     pea    -$190(a5)
  2196.     pea    0(a2,d5.l*4)
  2197.     jsr    _bezier_curve
  2198.     add.w    #$18,a7
  2199. ;                w = (GLdouble)bez_pt[3];
  2200.     lea    -$190(a5),a0
  2201.     fmove.s    $C(a0),fp0
  2202. ;                x = (GLdouble)bez_pt[0] / w;
  2203.     fmove.s    -$190(a5),fp1
  2204.     fmove.x    fp1,fp2
  2205.     fdiv.x    fp0,fp2
  2206. ;                y = (GLdouble)bez_pt[1] / w;
  2207.     lea    -$190(a5),a0
  2208.     fmove.s    4(a0),fp1
  2209.     fmove.x    fp1,fp4
  2210.     fdiv.x    fp0,fp4
  2211. ;                z = (GLdouble)bez_pt[2] / w;
  2212.     lea    -$190(a5),a0
  2213.     fmove.s    $8(a0),fp1
  2214.     fmove.x    fp1,fp3
  2215.     fdiv.x    fp0,fp3
  2216. ;                gluProject(x,y,z,model,proj,viewport,&x2,&y2,&z2);
  2217.     pea    -$160(a5)
  2218.     pea    -$158(a5)
  2219.     pea    -$150(a5)
  2220.     pea    -$110(a5)
  2221.     pea    -$100(a5)
  2222.     pea    -$80(a5)
  2223.     fmove.d    fp3,-(a7)
  2224.     fmove.d    fp4,-(a7)
  2225.     fmove.d    fp2,-(a7)
  2226.     jsr    _gluProject
  2227.     add.w    #$30,a7
  2228. ;                z2 *= z_med;
  2229.     fmove.d    -$160(a5),fp0
  2230.     fmul.x    fp5,fp0
  2231.     fmove.d    fp0,-$160(a5)
  2232. ;                x = x2-x1;
  2233.     fmove.d    -$150(a5),fp2
  2234.     fsub.d    -$138(a5),fp2
  2235. ;                y = y2-y1;
  2236.     fmove.d    -$158(a5),fp4
  2237.     fsub.d    -$140(a5),fp4
  2238. ;                z = z2-z1;
  2239.     fmove.d    -$160(a5),fp3
  2240.     fsub.d    -$148(a5),fp3
  2241. ;                tmp = sqrt(x*x+y*y+z*z);
  2242.     fmove.x    fp2,fp0
  2243.     fmul.x    fp2,fp0
  2244.     fmove.x    fp4,fp1
  2245.     fmul.x    fp4,fp1
  2246.     fadd.x    fp1,fp0
  2247.     fmove.x    fp3,fp1
  2248.     fmul.x    fp3,fp1
  2249.     fadd.x    fp1,fp0
  2250.     fmove.d    fp0,-(a7)
  2251.     jsr    _sqrt__r
  2252.     addq.w    #$8,a7
  2253. ;                x /= tmp;
  2254.     fdiv.x    fp0,fp2
  2255. ;                y /= tmp;
  2256.     fdiv.x    fp0,fp4
  2257. ;                z /= tmp;
  2258.     fdiv.x    fp0,fp3
  2259. ;                tmp = x3*x+y3*y+z3*z-x1*x-y1*y-z1*z;
  2260.     fmove.d    -$168(a5),fp0
  2261.     fmul.x    fp2,fp0
  2262.     fmove.d    -$170(a5),fp1
  2263.     fmul.x    fp4,fp1
  2264.     fadd.x    fp1,fp0
  2265.     fmove.d    -$178(a5),fp1
  2266.     fmul.x    fp3,fp1
  2267.     fadd.x    fp1,fp0
  2268.     fmove.d    -$138(a5),fp1
  2269.     fmul.x    fp2,fp1
  2270.     fsub.x    fp1,fp0
  2271.     fmove.d    -$140(a5),fp1
  2272.     fmul.x    fp4,fp1
  2273.     fsub.x    fp1,fp0
  2274.     fmove.d    -$148(a5),fp1
  2275.     fmul.x    fp3,fp1
  2276.     fsub.x    fp1,fp0
  2277. ;                x = x1+x*tmp-x3;
  2278.     fmul.x    fp0,fp2
  2279.     fadd.d    -$138(a5),fp2
  2280.     fsub.d    -$168(a5),fp2
  2281. ;                y = y1+y*tmp-y3;
  2282.     fmul.x    fp0,fp4
  2283.     fadd.d    -$140(a5),fp4
  2284.     fsub.d    -$170(a5),fp4
  2285. ;                z = z1+z*tmp-z3;
  2286.     fmul.x    fp0,fp3
  2287.     fadd.d    -$148(a5),fp3
  2288.     fsub.d    -$178(a5),fp3
  2289. ;                tmp = sqrt(x*x+y*y+z*z);
  2290.     fmove.x    fp2,fp0
  2291.     fmul.x    fp2,fp0
  2292.     fmove.x    fp0,fp2
  2293.     fmove.x    fp4,fp0
  2294.     fmul.x    fp4,fp0
  2295.     fadd.x    fp0,fp2
  2296.     fmove.x    fp3,fp0
  2297.     fmul.x    fp3,fp0
  2298.     fadd.x    fp0,fp2
  2299.     fmove.d    fp2,-(a7)
  2300.     jsr    _sqrt__r
  2301.     addq.w    #$8,a7
  2302. ;                if(tmp > len)
  2303.     fcmp.x    fp7,fp0
  2304.     fbole.b    L607
  2305. L606
  2306. ;                    len = tmp;
  2307.     fmove.d    fp0,fp7
  2308. L607
  2309.     addq.l    #1,d2
  2310. L608
  2311.     cmp.l    d3,d2
  2312.     blt    L605
  2313. L609
  2314. ;            
  2315.     bra    L622
  2316. L610
  2317. ;            for(i=1;
  2318.     moveq    #1,d2
  2319.     bra    L614
  2320. L611
  2321. ;                bezier_curve(pts+indx, bez_pt, (GLfloat)i/(GLfloat)P, 3,
  2322.     move.l    d6,-(a7)
  2323.     move.l    d4,-(a7)
  2324.     pea    3.w
  2325.     fmove.l    d2,fp0
  2326.     fmove.l    d3,fp1
  2327.     fdiv.x    fp1,fp0
  2328.     fmove.s    fp0,-(a7)
  2329.     pea    -$190(a5)
  2330.     pea    0(a2,d5.l*4)
  2331.     jsr    _bezier_curve
  2332.     add.w    #$18,a7
  2333. ;                x = (GLdouble)bez_pt[0];
  2334.     fmove.s    -$190(a5),fp0
  2335.     fmove.x    fp0,fp2
  2336. ;                y = (GLdouble)bez_pt[1];
  2337.     lea    -$190(a5),a0
  2338.     fmove.s    4(a0),fp0
  2339.     fmove.x    fp0,fp4
  2340. ;                z = (GLdouble)bez_pt[2];
  2341.     lea    -$190(a5),a0
  2342.     fmove.s    $8(a0),fp0
  2343.     fmove.x    fp0,fp3
  2344. ;                gluProject(x,y,z,model,proj,viewport,&x3,&y3,&z3);
  2345.     pea    -$178(a5)
  2346.     pea    -$170(a5)
  2347.     pea    -$168(a5)
  2348.     pea    -$110(a5)
  2349.     pea    -$100(a5)
  2350.     pea    -$80(a5)
  2351.     fmove.d    fp3,-(a7)
  2352.     fmove.d    fp4,-(a7)
  2353.     fmove.d    fp2,-(a7)
  2354.     jsr    _gluProject
  2355.     add.w    #$30,a7
  2356. ;                z3 *= z_med;
  2357.     fmove.d    -$178(a5),fp0
  2358.     fmul.x    fp5,fp0
  2359.     fmove.d    fp0,-$178(a5)
  2360. ;                bezier_curve(pts+indx, bez_pt, (GLfloat)(i-1)/(GLfloat)P, 3,
  2361.     move.l    d6,-(a7)
  2362.     move.l    d4,-(a7)
  2363.     pea    3.w
  2364.     move.l    d2,d0
  2365.     subq.l    #1,d0
  2366.     fmove.l    d0,fp0
  2367.     fmove.l    d3,fp1
  2368.     fdiv.x    fp1,fp0
  2369.     fmove.s    fp0,-(a7)
  2370.     pea    -$190(a5)
  2371.     pea    0(a2,d5.l*4)
  2372.     jsr    _bezier_curve
  2373.     add.w    #$18,a7
  2374. ;                x = (GLdouble)bez_pt[0];
  2375.     fmove.s    -$190(a5),fp0
  2376.     fmove.x    fp0,fp2
  2377. ;                y = (GLdouble)bez_pt[1];
  2378.     lea    -$190(a5),a0
  2379.     fmove.s    4(a0),fp0
  2380.     fmove.x    fp0,fp4
  2381. ;                z = (GLdouble)bez_pt[2];
  2382.     lea    -$190(a5),a0
  2383.     fmove.s    $8(a0),fp0
  2384.     fmove.x    fp0,fp3
  2385. ;                gluProject(x,y,z,model,proj,viewport,&x1,&y1,&z1);
  2386.     pea    -$148(a5)
  2387.     pea    -$140(a5)
  2388.     pea    -$138(a5)
  2389.     pea    -$110(a5)
  2390.     pea    -$100(a5)
  2391.     pea    -$80(a5)
  2392.     fmove.d    fp3,-(a7)
  2393.     fmove.d    fp4,-(a7)
  2394.     fmove.d    fp2,-(a7)
  2395.     jsr    _gluProject
  2396.     add.w    #$30,a7
  2397. ;                z1 *= z_med;
  2398.     fmove.d    -$148(a5),fp0
  2399.     fmul.x    fp5,fp0
  2400.     fmove.d    fp0,-$148(a5)
  2401. ;                bezier_curve(pts+indx, bez_pt, (GLfloat)(i+1)/(GLfloat)P, 3,
  2402.     move.l    d6,-(a7)
  2403.     move.l    d4,-(a7)
  2404.     pea    3.w
  2405.     move.l    d2,d0
  2406.     addq.l    #1,d0
  2407.     fmove.l    d0,fp0
  2408.     fmove.l    d3,fp1
  2409.     fdiv.x    fp1,fp0
  2410.     fmove.s    fp0,-(a7)
  2411.     pea    -$190(a5)
  2412.     pea    0(a2,d5.l*4)
  2413.     jsr    _bezier_curve
  2414.     add.w    #$18,a7
  2415. ;                x = (GLdouble)bez_pt[0];
  2416.     fmove.s    -$190(a5),fp0
  2417.     fmove.x    fp0,fp2
  2418. ;                y = (GLdouble)bez_pt[1];
  2419.     lea    -$190(a5),a0
  2420.     fmove.s    4(a0),fp0
  2421.     fmove.x    fp0,fp4
  2422. ;                z = (GLdouble)bez_pt[2];
  2423.     lea    -$190(a5),a0
  2424.     fmove.s    $8(a0),fp0
  2425.     fmove.x    fp0,fp3
  2426. ;                gluProject(x,y,z,model,proj,viewport,&x2,&y2,&z2);
  2427.     pea    -$160(a5)
  2428.     pea    -$158(a5)
  2429.     pea    -$150(a5)
  2430.     pea    -$110(a5)
  2431.     pea    -$100(a5)
  2432.     pea    -$80(a5)
  2433.     fmove.d    fp3,-(a7)
  2434.     fmove.d    fp4,-(a7)
  2435.     fmove.d    fp2,-(a7)
  2436.     jsr    _gluProject
  2437.     add.w    #$30,a7
  2438. ;                z2 *= z_med;
  2439.     fmove.d    -$160(a5),fp0
  2440.     fmul.x    fp5,fp0
  2441.     fmove.d    fp0,-$160(a5)
  2442. ;                x = x2-x1;
  2443.     fmove.d    -$150(a5),fp2
  2444.     fsub.d    -$138(a5),fp2
  2445. ;                y = y2-y1;
  2446.     fmove.d    -$158(a5),fp4
  2447.     fsub.d    -$140(a5),fp4
  2448. ;                z = z2-z1;
  2449.     fmove.d    -$160(a5),fp3
  2450.     fsub.d    -$148(a5),fp3
  2451. ;                tmp = sqrt(x*x+y*y+z*z);
  2452.     fmove.x    fp2,fp0
  2453.     fmul.x    fp2,fp0
  2454.     fmove.x    fp4,fp1
  2455.     fmul.x    fp4,fp1
  2456.     fadd.x    fp1,fp0
  2457.     fmove.x    fp3,fp1
  2458.     fmul.x    fp3,fp1
  2459.     fadd.x    fp1,fp0
  2460.     fmove.d    fp0,-(a7)
  2461.     jsr    _sqrt__r
  2462.     addq.w    #$8,a7
  2463. ;                x /= tmp;
  2464.     fdiv.x    fp0,fp2
  2465. ;                y /= tmp;
  2466.     fdiv.x    fp0,fp4
  2467. ;                z /= tmp;
  2468.     fdiv.x    fp0,fp3
  2469. ;                tmp = x3*x+y3*y+z3*z-x1*x-y1*y-z1*z;
  2470.     fmove.d    -$168(a5),fp0
  2471.     fmul.x    fp2,fp0
  2472.     fmove.d    -$170(a5),fp1
  2473.     fmul.x    fp4,fp1
  2474.     fadd.x    fp1,fp0
  2475.     fmove.d    -$178(a5),fp1
  2476.     fmul.x    fp3,fp1
  2477.     fadd.x    fp1,fp0
  2478.     fmove.d    -$138(a5),fp1
  2479.     fmul.x    fp2,fp1
  2480.     fsub.x    fp1,fp0
  2481.     fmove.d    -$140(a5),fp1
  2482.     fmul.x    fp4,fp1
  2483.     fsub.x    fp1,fp0
  2484.     fmove.d    -$148(a5),fp1
  2485.     fmul.x    fp3,fp1
  2486.     fsub.x    fp1,fp0
  2487. ;                x = x1+x*tmp-x3;
  2488.     fmul.x    fp0,fp2
  2489.     fadd.d    -$138(a5),fp2
  2490.     fsub.d    -$168(a5),fp2
  2491. ;                y = y1+y*tmp-y3;
  2492.     fmul.x    fp0,fp4
  2493.     fadd.d    -$140(a5),fp4
  2494.     fsub.d    -$170(a5),fp4
  2495. ;                z = z1+z*tmp-z3;
  2496.     fmul.x    fp0,fp3
  2497.     fadd.d    -$148(a5),fp3
  2498.     fsub.d    -$178(a5),fp3
  2499. ;                tmp = sqrt(x*x+y*y+z*z);
  2500.     fmove.x    fp2,fp0
  2501.     fmul.x    fp2,fp0
  2502.     fmove.x    fp0,fp2
  2503.     fmove.x    fp4,fp0
  2504.     fmul.x    fp4,fp0
  2505.     fadd.x    fp0,fp2
  2506.     fmove.x    fp3,fp0
  2507.     fmul.x    fp3,fp0
  2508.     fadd.x    fp0,fp2
  2509.     fmove.d    fp2,-(a7)
  2510.     jsr    _sqrt__r
  2511.     addq.w    #$8,a7
  2512. ;                if(tmp > len)
  2513.     fcmp.x    fp7,fp0
  2514.     fbole.b    L613
  2515. L612
  2516. ;                    len = tmp;
  2517.     fmove.d    fp0,fp7
  2518. L613
  2519.     addq.l    #1,d2
  2520. L614
  2521.     cmp.l    d3,d2
  2522.     blt    L611
  2523. L615
  2524. ;            
  2525.     bra    L622
  2526. L616
  2527. ;            for(i=1;
  2528.     moveq    #1,d2
  2529.     bra    L620
  2530. L617
  2531. ;                bezier_curve(pts+indx, bez_pt, (GLfloat)i/(GLfloat)P, 2,
  2532.     move.l    d6,-(a7)
  2533.     move.l    d4,-(a7)
  2534.     pea    2.w
  2535.     fmove.l    d2,fp0
  2536.     fmove.l    d3,fp1
  2537.     fdiv.x    fp1,fp0
  2538.     fmove.s    fp0,-(a7)
  2539.     pea    -$190(a5)
  2540.     pea    0(a2,d5.l*4)
  2541.     jsr    _bezier_curve
  2542.     add.w    #$18,a7
  2543. ;                x = (GLdouble)bez_pt[0];
  2544.     fmove.s    -$190(a5),fp0
  2545.     fmove.x    fp0,fp2
  2546. ;                y = (GLdouble)bez_pt[1];
  2547.     lea    -$190(a5),a0
  2548.     fmove.s    4(a0),fp0
  2549.     fmove.x    fp0,fp4
  2550. ;                z = 0.0;
  2551. ;                gluProject(x,y,z,model,proj,viewport,&x3,&y3,&z3);
  2552.     pea    -$178(a5)
  2553.     pea    -$170(a5)
  2554.     pea    -$168(a5)
  2555.     pea    -$110(a5)
  2556.     pea    -$100(a5)
  2557.     pea    -$80(a5)
  2558.     clr.l    -(a7)
  2559.     clr.l    -(a7)
  2560.     fmove.d    fp4,-(a7)
  2561.     fmove.d    fp2,-(a7)
  2562.     jsr    _gluProject
  2563.     add.w    #$30,a7
  2564. ;                z3 *= z_med;
  2565.     fmove.d    -$178(a5),fp0
  2566.     fmul.x    fp5,fp0
  2567.     fmove.d    fp0,-$178(a5)
  2568. ;                bezier_curve(pts+indx, bez_pt, (GLfloat)(i-1)/(GLfloat)P, 2,
  2569.     move.l    d6,-(a7)
  2570.     move.l    d4,-(a7)
  2571.     pea    2.w
  2572.     move.l    d2,d0
  2573.     subq.l    #1,d0
  2574.     fmove.l    d0,fp0
  2575.     fmove.l    d3,fp1
  2576.     fdiv.x    fp1,fp0
  2577.     fmove.s    fp0,-(a7)
  2578.     pea    -$190(a5)
  2579.     pea    0(a2,d5.l*4)
  2580.     jsr    _bezier_curve
  2581.     add.w    #$18,a7
  2582. ;                x = (GLdouble)bez_pt[0];
  2583.     fmove.s    -$190(a5),fp0
  2584.     fmove.x    fp0,fp2
  2585. ;                y = (GLdouble)bez_pt[1];
  2586.     lea    -$190(a5),a0
  2587.     fmove.s    4(a0),fp0
  2588.     fmove.x    fp0,fp4
  2589. ;                z = 0.0;
  2590. ;                gluProject(x,y,z,model,proj,viewport,&x1,&y1,&z1);
  2591.     pea    -$148(a5)
  2592.     pea    -$140(a5)
  2593.     pea    -$138(a5)
  2594.     pea    -$110(a5)
  2595.     pea    -$100(a5)
  2596.     pea    -$80(a5)
  2597.     clr.l    -(a7)
  2598.     clr.l    -(a7)
  2599.     fmove.d    fp4,-(a7)
  2600.     fmove.d    fp2,-(a7)
  2601.     jsr    _gluProject
  2602.     add.w    #$30,a7
  2603. ;                z1 *= z_med;
  2604.     fmove.d    -$148(a5),fp0
  2605.     fmul.x    fp5,fp0
  2606.     fmove.d    fp0,-$148(a5)
  2607. ;                bezier_curve(pts+indx, bez_pt, (GLfloat)(i+1)/(GLfloat)P, 2,
  2608.     move.l    d6,-(a7)
  2609.     move.l    d4,-(a7)
  2610.     pea    2.w
  2611.     move.l    d2,d0
  2612.     addq.l    #1,d0
  2613.     fmove.l    d0,fp0
  2614.     fmove.l    d3,fp1
  2615.     fdiv.x    fp1,fp0
  2616.     fmove.s    fp0,-(a7)
  2617.     pea    -$190(a5)
  2618.     pea    0(a2,d5.l*4)
  2619.     jsr    _bezier_curve
  2620.     add.w    #$18,a7
  2621. ;                x = (GLdouble)bez_pt[0];
  2622.     fmove.s    -$190(a5),fp0
  2623.     fmove.x    fp0,fp2
  2624. ;                y = (GLdouble)bez_pt[1];
  2625.     lea    -$190(a5),a0
  2626.     fmove.s    4(a0),fp0
  2627.     fmove.x    fp0,fp4
  2628. ;                z = 0.0;
  2629. ;                gluProject(x,y,z,model,proj,viewport,&x2,&y2,&z2);
  2630.     pea    -$160(a5)
  2631.     pea    -$158(a5)
  2632.     pea    -$150(a5)
  2633.     pea    -$110(a5)
  2634.     pea    -$100(a5)
  2635.     pea    -$80(a5)
  2636.     clr.l    -(a7)
  2637.     clr.l    -(a7)
  2638.     fmove.d    fp4,-(a7)
  2639.     fmove.d    fp2,-(a7)
  2640.     jsr    _gluProject
  2641.     add.w    #$30,a7
  2642. ;                z2 *= z_med;
  2643.     fmove.d    -$160(a5),fp0
  2644.     fmul.x    fp5,fp0
  2645.     fmove.d    fp0,-$160(a5)
  2646. ;                x = x2-x1;
  2647.     fmove.d    -$150(a5),fp2
  2648.     fsub.d    -$138(a5),fp2
  2649. ;                y = y2-y1;
  2650.     fmove.d    -$158(a5),fp4
  2651.     fsub.d    -$140(a5),fp4
  2652. ;                z = z2-z1;
  2653.     fmove.d    -$160(a5),fp3
  2654.     fsub.d    -$148(a5),fp3
  2655. ;                tmp = sqrt(x*x+y*y+z*z);
  2656.     fmove.x    fp2,fp0
  2657.     fmul.x    fp2,fp0
  2658.     fmove.x    fp4,fp1
  2659.     fmul.x    fp4,fp1
  2660.     fadd.x    fp1,fp0
  2661.     fmove.x    fp3,fp1
  2662.     fmul.x    fp3,fp1
  2663.     fadd.x    fp1,fp0
  2664.     fmove.d    fp0,-(a7)
  2665.     jsr    _sqrt__r
  2666.     addq.w    #$8,a7
  2667. ;                x /= tmp;
  2668.     fdiv.x    fp0,fp2
  2669. ;                y /= tmp;
  2670.     fdiv.x    fp0,fp4
  2671. ;                z /= tmp;
  2672.     fdiv.x    fp0,fp3
  2673. ;                tmp = x3*x+y3*y+z3*z-x1*x-y1*y-z1*z;
  2674.     fmove.d    -$168(a5),fp0
  2675.     fmul.x    fp2,fp0
  2676.     fmove.d    -$170(a5),fp1
  2677.     fmul.x    fp4,fp1
  2678.     fadd.x    fp1,fp0
  2679.     fmove.d    -$178(a5),fp1
  2680.     fmul.x    fp3,fp1
  2681.     fadd.x    fp1,fp0
  2682.     fmove.d    -$138(a5),fp1
  2683.     fmul.x    fp2,fp1
  2684.     fsub.x    fp1,fp0
  2685.     fmove.d    -$140(a5),fp1
  2686.     fmul.x    fp4,fp1
  2687.     fsub.x    fp1,fp0
  2688.     fmove.d    -$148(a5),fp1
  2689.     fmul.x    fp3,fp1
  2690.     fsub.x    fp1,fp0
  2691. ;                x = x1+x*tmp-x3;
  2692.     fmul.x    fp0,fp2
  2693.     fadd.d    -$138(a5),fp2
  2694.     fsub.d    -$168(a5),fp2
  2695. ;                y = y1+y*tmp-y3;
  2696.     fmul.x    fp0,fp4
  2697.     fadd.d    -$140(a5),fp4
  2698.     fsub.d    -$170(a5),fp4
  2699. ;                z = z1+z*tmp-z3;
  2700.     fmul.x    fp0,fp3
  2701.     fadd.d    -$148(a5),fp3
  2702.     fsub.d    -$178(a5),fp3
  2703. ;                tmp = sqrt(x*x+y*y+z*z);
  2704.     fmove.x    fp2,fp0
  2705.     fmul.x    fp2,fp0
  2706.     fmove.x    fp0,fp2
  2707.     fmove.x    fp4,fp0
  2708.     fmul.x    fp4,fp0
  2709.     fadd.x    fp0,fp2
  2710.     fmove.x    fp3,fp0
  2711.     fmul.x    fp3,fp0
  2712.     fadd.x    fp0,fp2
  2713.     fmove.d    fp2,-(a7)
  2714.     jsr    _sqrt__r
  2715.     addq.w    #$8,a7
  2716. ;                if(tmp > len)
  2717.     fcmp.x    fp7,fp0
  2718.     fbole.b    L619
  2719. L618
  2720. ;                    len = tmp;
  2721.     fmove.d    fp0,fp7
  2722. L619
  2723.     addq.l    #1,d2
  2724. L620
  2725.     cmp.l    d3,d2
  2726.     blt    L617
  2727. L621
  2728. ;            
  2729. L622
  2730. ;    if(len < tolerance)
  2731.     fmove.s    $18(a5),fp0
  2732.     fmove.x    fp7,fp1
  2733.     fcmp.x    fp0,fp1
  2734.     fboge.b    L624
  2735. L623
  2736.     move.l    d4,d0
  2737.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
  2738.     movem.l    (a7)+,d2-d6/a2
  2739.     unlk    a5
  2740.     rts
  2741. L624
  2742.     fmove.s    $18(a5),fp0
  2743.     fmove.x    fp7,fp1
  2744.     fdiv.x    fp0,fp1
  2745.     fmove.d    fp1,-(a7)
  2746.     jsr    _sqrt__r
  2747.     addq.w    #$8,a7
  2748.     addq.l    #2,d4
  2749.     fmove.l    d4,fp1
  2750.     fmul.x    fp1,fp0
  2751.     fadd.d    #$.3FF00000.00000000,fp0
  2752.     fmove.l    fp0,d0
  2753.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
  2754.     movem.l    (a7)+,d2-d6/a2
  2755.     unlk    a5
  2756.     rts
  2757.  
  2758.     SECTION "_calc_sampling_3D:0",CODE
  2759.  
  2760.  
  2761. ;static GLenum
  2762. _calc_sampling_3D
  2763. L654    EQU    -$60
  2764.     link    a5,#L654
  2765.     movem.l    d2-d7/a2-a4,-(a7)
  2766.     fmovem.x fp2,-(a7)
  2767.     move.l    $10(a5),d5
  2768.     move.l    $1C(a5),a3
  2769.     move.l    $20(a5),a4
  2770.     fmove.s    $C(a5),fp2
  2771. L627
  2772. ;    ufactor_cnt=new_ctrl->s_bezier_cnt;
  2773.     move.l    $8(a5),a0
  2774.     move.l    $60(a0),-$10(a5)
  2775. ;    vfactor_cnt=new_ctrl->t_bezier_cnt;
  2776.     move.l    $8(a5),a0
  2777.     move.l    $64(a0),-$14(a5)
  2778. ;    if((*ufactors=(GLint *)malloc(sizeof(GLint)*ufactor_cnt*3))
  2779.     move.l    -$10(a5),d0
  2780.     moveq    #2,d1
  2781.     asl.l    d1,d0
  2782.     mulu.l    #3,d0
  2783.     move.l    d0,-(a7)
  2784.     jsr    _malloc
  2785.     addq.w    #4,a7
  2786.     move.l    a3,a1
  2787.     move.l    d0,(a1)
  2788.     move.l    d0,a0
  2789.     cmp.w    #0,a0
  2790.     bne.b    L629
  2791. L628
  2792.     move.l    #$18A26,d0
  2793.     fmovem.x (a7)+,fp2
  2794.     movem.l    (a7)+,d2-d7/a2-a4
  2795.     unlk    a5
  2796.     rts
  2797. L629
  2798. ;    if((*vfactors=(GLint *)malloc(sizeof(GLint)*vfactor_cnt*3))
  2799.     move.l    -$14(a5),d0
  2800.     moveq    #2,d1
  2801.     asl.l    d1,d0
  2802.     mulu.l    #3,d0
  2803.     move.l    d0,-(a7)
  2804.     jsr    _malloc
  2805.     addq.w    #4,a7
  2806.     move.l    a4,a1
  2807.     move.l    d0,(a1)
  2808.     move.l    d0,a0
  2809.     cmp.w    #0,a0
  2810.     bne.b    L631
  2811. L630
  2812. ;        free(*ufactors);
  2813.     move.l    a3,a1
  2814.     move.l    (a1),-(a7)
  2815.     jsr    _free
  2816.     addq.w    #4,a7
  2817.     move.l    #$18A26,d0
  2818.     fmovem.x (a7)+,fp2
  2819.     movem.l    (a7)+,d2-d7/a2-a4
  2820.     unlk    a5
  2821.     rts
  2822. L631
  2823. ;    ctrl=new_ctrl->geom_ctrl;
  2824.     move.l    $8(a5),a0
  2825.     move.l    (a0),a2
  2826. ;    offset1=new_ctrl->geom_t_stride*vorder;
  2827.     move.l    $8(a5),a0
  2828.     move.l    $8(a0),-$18(a5)
  2829.     move.l    -$18(a5),d0
  2830.     muls.l    $18(a5),d0
  2831.     move.l    d0,-$18(a5)
  2832. ;    offset2=new_ctrl->geom_s_stride*uorder;
  2833.     move.l    $8(a5),a0
  2834.     move.l    4(a0),d0
  2835.     muls.l    $14(a5),d0
  2836.     move.l    d0,d7
  2837. ;    for(j=0;
  2838.     moveq    #0,d3
  2839.     bra    L641
  2840. L632
  2841. ;        *(*vfactors+j*3+1)=tmp_factor1=calc_factor(ctrl,vorder,
  2842.     move.l    d5,-(a7)
  2843.     fmove.s    fp2,-(a7)
  2844.     move.l    d5,-(a7)
  2845.     move.l    d3,d0
  2846.     muls.l    -$18(a5),d0
  2847.     move.l    d0,-(a7)
  2848.     move.l    $18(a5),-(a7)
  2849.     move.l    a2,-(a7)
  2850.     jsr    _calc_factor
  2851.     add.w    #$18,a7
  2852.     move.l    d0,d4
  2853.     move.l    a4,a1
  2854.     move.l    d3,d0
  2855.     muls.l    #3,d0
  2856.     move.l    (a1),a0
  2857.     lea    0(a0,d0.l*4),a0
  2858.     move.l    d4,4(a0)
  2859. ;        for(i=1;
  2860.     moveq    #1,d2
  2861.     bra.b    L636
  2862. L633
  2863. ;            tmp_factor2=calc_factor(ctrl,vorder,
  2864.     move.l    d5,-(a7)
  2865.     fmove.s    fp2,-(a7)
  2866.     move.l    d5,-(a7)
  2867.     move.l    d3,d0
  2868.     muls.l    -$18(a5),d0
  2869.     move.l    d2,d1
  2870.     muls.l    d7,d1
  2871.     add.l    d1,d0
  2872.     move.l    d0,-(a7)
  2873.     move.l    $18(a5),-(a7)
  2874.     move.l    a2,-(a7)
  2875.     jsr    _calc_factor
  2876.     add.w    #$18,a7
  2877. ;            if(tmp_factor2>tmp_factor1)
  2878.     cmp.l    d4,d0
  2879.     ble.b    L635
  2880. L634
  2881. ;                tmp_factor1=tmp_factor2;
  2882.     move.l    d0,d4
  2883. L635
  2884.     addq.l    #1,d2
  2885. L636
  2886.     cmp.l    -$10(a5),d2
  2887.     blt.b    L633
  2888. L637
  2889. ;            j*offset2,offset3,tolerance,dim);
  2890.     move.l    d5,-(a7)
  2891.     fmove.s    fp2,-(a7)
  2892.     move.l    d5,-(a7)
  2893.     move.l    d3,d0
  2894.     muls.l    -$18(a5),d0
  2895.     muls.l    d7,d2
  2896.     add.l    d2,d0
  2897.     move.l    $8(a5),a0
  2898.     sub.l    4(a0),d0
  2899.     move.l    d0,-(a7)
  2900.     move.l    $18(a5),-(a7)
  2901.     move.l    a2,-(a7)
  2902.     jsr    _calc_factor
  2903.     add.w    #$18,a7
  2904.     move.l    a4,a1
  2905.     move.l    d3,d1
  2906.     muls.l    #3,d1
  2907.     move.l    (a1),a0
  2908.     lea    0(a0,d1.l*4),a0
  2909.     move.l    d0,$8(a0)
  2910. ;        if(tmp_factor2>tmp_factor1)
  2911.     cmp.l    d4,d0
  2912.     ble.b    L639
  2913. L638
  2914. ;            *(*vfactors+j*3)=tmp_factor2;
  2915.     move.l    a4,a1
  2916.     move.l    d3,d1
  2917.     muls.l    #3,d1
  2918.     move.l    (a1),a0
  2919.     move.l    d0,0(a0,d1.l*4)
  2920.     bra.b    L640
  2921. L639
  2922. ;            *(*vfactors+j*3)=tmp_factor1;
  2923.     move.l    a4,a1
  2924.     move.l    d3,d0
  2925.     muls.l    #3,d0
  2926.     move.l    (a1),a0
  2927.     move.l    d4,0(a0,d0.l*4)
  2928. L640
  2929.     addq.l    #1,d3
  2930. L641
  2931.     cmp.l    -$14(a5),d3
  2932.     blt    L632
  2933. L642
  2934. ;    offset3=new_ctrl->geom_s_stride;
  2935.     move.l    $8(a5),a0
  2936.     move.l    4(a0),-$20(a5)
  2937. ;    offset2=new_ctrl->geom_s_stride*uorder;
  2938.     move.l    $8(a5),a0
  2939.     move.l    4(a0),d0
  2940.     muls.l    $14(a5),d0
  2941.     move.l    d0,d7
  2942. ;    for(j=0;
  2943.     moveq    #0,d3
  2944.     bra    L652
  2945. L643
  2946. ;        *(*ufactors+j*3+1)=tmp_factor1=calc_factor(ctrl,uorder,
  2947.     move.l    d5,-(a7)
  2948.     fmove.s    fp2,-(a7)
  2949.     move.l    -$20(a5),-(a7)
  2950.     move.l    d3,d0
  2951.     muls.l    d7,d0
  2952.     move.l    d0,-(a7)
  2953.     move.l    $14(a5),-(a7)
  2954.     move.l    a2,-(a7)
  2955.     jsr    _calc_factor
  2956.     add.w    #$18,a7
  2957.     move.l    d0,d4
  2958.     move.l    a3,a1
  2959.     move.l    d3,d0
  2960.     muls.l    #3,d0
  2961.     move.l    (a1),a0
  2962.     lea    0(a0,d0.l*4),a0
  2963.     move.l    d4,4(a0)
  2964. ;        for(i=1;
  2965.     moveq    #1,d2
  2966.     bra.b    L647
  2967. L644
  2968. ;            tmp_factor2=calc_factor(ctrl,uorder,
  2969.     move.l    d5,-(a7)
  2970.     fmove.s    fp2,-(a7)
  2971.     move.l    -$20(a5),-(a7)
  2972.     move.l    d3,d0
  2973.     muls.l    d7,d0
  2974.     move.l    d2,d1
  2975.     muls.l    -$18(a5),d1
  2976.     add.l    d1,d0
  2977.     move.l    d0,-(a7)
  2978.     move.l    $14(a5),-(a7)
  2979.     move.l    a2,-(a7)
  2980.     jsr    _calc_factor
  2981.     add.w    #$18,a7
  2982. ;            if(tmp_factor2>tmp_factor1)
  2983.     cmp.l    d4,d0
  2984.     ble.b    L646
  2985. L645
  2986. ;                tmp_factor1=tmp_factor2;
  2987.     move.l    d0,d4
  2988. L646
  2989.     addq.l    #1,d2
  2990. L647
  2991.     cmp.l    -$14(a5),d2
  2992.     blt.b    L644
  2993. L648
  2994. ;        *(*ufactors+j*3+2)=tmp_factor2=calc_factor(ctrl,uorder,
  2995.     move.l    d5,-(a7)
  2996.     fmove.s    fp2,-(a7)
  2997.     move.l    -$20(a5),-(a7)
  2998.     move.l    d3,d0
  2999.     muls.l    d7,d0
  3000.     muls.l    -$18(a5),d2
  3001.     add.l    d2,d0
  3002.     move.l    $8(a5),a0
  3003.     sub.l    $8(a0),d0
  3004.     move.l    d0,-(a7)
  3005.     move.l    $14(a5),-(a7)
  3006.     move.l    a2,-(a7)
  3007.     jsr    _calc_factor
  3008.     add.w    #$18,a7
  3009.     move.l    a3,a1
  3010.     move.l    d3,d1
  3011.     muls.l    #3,d1
  3012.     move.l    (a1),a0
  3013.     lea    0(a0,d1.l*4),a0
  3014.     move.l    d0,$8(a0)
  3015. ;        if(tmp_factor2>tmp_factor1)
  3016.     cmp.l    d4,d0
  3017.     ble.b    L650
  3018. L649
  3019. ;            *(*ufactors+j*3)=tmp_factor2;
  3020.     move.l    a3,a1
  3021.     move.l    d3,d1
  3022.     muls.l    #3,d1
  3023.     move.l    (a1),a0
  3024.     move.l    d0,0(a0,d1.l*4)
  3025.     bra.b    L651
  3026. L650
  3027. ;            *(*ufactors+j*3)=tmp_factor1;
  3028.     move.l    a3,a1
  3029.     move.l    d3,d0
  3030.     muls.l    #3,d0
  3031.     move.l    (a1),a0
  3032.     move.l    d4,0(a0,d0.l*4)
  3033. L651
  3034.     addq.l    #1,d3
  3035. L652
  3036.     cmp.l    -$10(a5),d3
  3037.     blt    L643
  3038. L653
  3039.     moveq    #0,d0
  3040.     fmovem.x (a7)+,fp2
  3041.     movem.l    (a7)+,d2-d7/a2-a4
  3042.     unlk    a5
  3043.     rts
  3044.  
  3045.     SECTION "_calc_sampling_param_3D:0",CODE
  3046.  
  3047.  
  3048. ;static GLenum
  3049. _calc_sampling_param_3D
  3050. L682    EQU    -$60
  3051.     link    a5,#L682
  3052.     movem.l    d2-d7/a2-a4,-(a7)
  3053.     fmovem.x fp2,-(a7)
  3054.     move.l    $10(a5),d5
  3055.     move.l    $1C(a5),a3
  3056.     move.l    $20(a5),a4
  3057.     fmove.s    $C(a5),fp2
  3058. L655
  3059. ;    ufactor_cnt=new_ctrl->s_bezier_cnt;
  3060.     move.l    $8(a5),a0
  3061.     move.l    $60(a0),-$10(a5)
  3062. ;    vfactor_cnt=new_ctrl->t_bezier_cnt;
  3063.     move.l    $8(a5),a0
  3064.     move.l    $64(a0),-$14(a5)
  3065. ;    if((*ufactors=(GLint *)malloc(sizeof(GLint)*ufactor_cnt*3))
  3066.     move.l    -$10(a5),d0
  3067.     moveq    #2,d1
  3068.     asl.l    d1,d0
  3069.     mulu.l    #3,d0
  3070.     move.l    d0,-(a7)
  3071.     jsr    _malloc
  3072.     addq.w    #4,a7
  3073.     move.l    a3,a1
  3074.     move.l    d0,(a1)
  3075.     move.l    d0,a0
  3076.     cmp.w    #0,a0
  3077.     bne.b    L657
  3078. L656
  3079.     move.l    #$18A26,d0
  3080.     fmovem.x (a7)+,fp2
  3081.     movem.l    (a7)+,d2-d7/a2-a4
  3082.     unlk    a5
  3083.     rts
  3084. L657
  3085. ;    if((*vfactors=(GLint *)malloc(sizeof(GLint)*vfactor_cnt*3))
  3086.     move.l    -$14(a5),d0
  3087.     moveq    #2,d1
  3088.     asl.l    d1,d0
  3089.     mulu.l    #3,d0
  3090.     move.l    d0,-(a7)
  3091.     jsr    _malloc
  3092.     addq.w    #4,a7
  3093.     move.l    a4,a1
  3094.     move.l    d0,(a1)
  3095.     move.l    d0,a0
  3096.     cmp.w    #0,a0
  3097.     bne.b    L659
  3098. L658
  3099. ;        free(*ufactors);
  3100.     move.l    a3,a1
  3101.     move.l    (a1),-(a7)
  3102.     jsr    _free
  3103.     addq.w    #4,a7
  3104.     move.l    #$18A26,d0
  3105.     fmovem.x (a7)+,fp2
  3106.     movem.l    (a7)+,d2-d7/a2-a4
  3107.     unlk    a5
  3108.     rts
  3109. L659
  3110. ;    ctrl=new_ctrl->geom_ctrl;
  3111.     move.l    $8(a5),a0
  3112.     move.l    (a0),a2
  3113. ;    offset1=new_ctrl->geom_t_stride*vorder;
  3114.     move.l    $8(a5),a0
  3115.     move.l    $8(a0),-$18(a5)
  3116.     move.l    -$18(a5),d0
  3117.     muls.l    $18(a5),d0
  3118.     move.l    d0,-$18(a5)
  3119. ;    offset2=new_ctrl->geom_s_stride*uorder;
  3120.     move.l    $8(a5),a0
  3121.     move.l    4(a0),d0
  3122.     muls.l    $14(a5),d0
  3123.     move.l    d0,d7
  3124. ;    for(j=0;
  3125.     moveq    #0,d3
  3126.     bra    L669
  3127. L660
  3128. ;        *(*vfactors+j*3+1)=tmp_factor1=calc_parametric_factor(ctrl,vorde
  3129.     move.l    d5,-(a7)
  3130.     fmove.s    fp2,-(a7)
  3131.     move.l    d5,-(a7)
  3132.     move.l    d3,d0
  3133.     muls.l    -$18(a5),d0
  3134.     move.l    d0,-(a7)
  3135.     move.l    $18(a5),-(a7)
  3136.     move.l    a2,-(a7)
  3137.     jsr    _calc_parametric_factor
  3138.     add.w    #$18,a7
  3139.     move.l    d0,d4
  3140.     move.l    a4,a1
  3141.     move.l    d3,d0
  3142.     muls.l    #3,d0
  3143.     move.l    (a1),a0
  3144.     lea    0(a0,d0.l*4),a0
  3145.     move.l    d4,4(a0)
  3146. ;        for(i=1;
  3147.     moveq    #1,d2
  3148.     bra.b    L664
  3149. L661
  3150. ;            tmp_factor2=calc_parametric_factor(ctrl,vorder,
  3151.     move.l    d5,-(a7)
  3152.     fmove.s    fp2,-(a7)
  3153.     move.l    d5,-(a7)
  3154.     move.l    d3,d0
  3155.     muls.l    -$18(a5),d0
  3156.     move.l    d2,d1
  3157.     muls.l    d7,d1
  3158.     add.l    d1,d0
  3159.     move.l    d0,-(a7)
  3160.     move.l    $18(a5),-(a7)
  3161.     move.l    a2,-(a7)
  3162.     jsr    _calc_parametric_factor
  3163.     add.w    #$18,a7
  3164. ;            if(tmp_factor2>tmp_factor1)
  3165.     cmp.l    d4,d0
  3166.     ble.b    L663
  3167. L662
  3168. ;                tmp_factor1=tmp_factor2;
  3169.     move.l    d0,d4
  3170. L663
  3171.     addq.l    #1,d2
  3172. L664
  3173.     cmp.l    -$10(a5),d2
  3174.     blt.b    L661
  3175. L665
  3176. ;        *(*vfactors+j*3+2)=tmp_factor2=calc_parametric_factor(ctrl,vorde
  3177.     move.l    d5,-(a7)
  3178.     fmove.s    fp2,-(a7)
  3179.     move.l    d5,-(a7)
  3180.     move.l    d3,d0
  3181.     muls.l    -$18(a5),d0
  3182.     muls.l    d7,d2
  3183.     add.l    d2,d0
  3184.     move.l    $8(a5),a0
  3185.     sub.l    4(a0),d0
  3186.     move.l    d0,-(a7)
  3187.     move.l    $18(a5),-(a7)
  3188.     move.l    a2,-(a7)
  3189.     jsr    _calc_parametric_factor
  3190.     add.w    #$18,a7
  3191.     move.l    a4,a1
  3192.     move.l    d3,d1
  3193.     muls.l    #3,d1
  3194.     move.l    (a1),a0
  3195.     lea    0(a0,d1.l*4),a0
  3196.     move.l    d0,$8(a0)
  3197. ;        if(tmp_factor2>tmp_factor1)
  3198.     cmp.l    d4,d0
  3199.     ble.b    L667
  3200. L666
  3201. ;            *(*vfactors+j*3)=tmp_factor2;
  3202.     move.l    a4,a1
  3203.     move.l    d3,d1
  3204.     muls.l    #3,d1
  3205.     move.l    (a1),a0
  3206.     move.l    d0,0(a0,d1.l*4)
  3207.     bra.b    L668
  3208. L667
  3209. ;            *(*vfactors+j*3)=tmp_factor1;
  3210.     move.l    a4,a1
  3211.     move.l    d3,d0
  3212.     muls.l    #3,d0
  3213.     move.l    (a1),a0
  3214.     move.l    d4,0(a0,d0.l*4)
  3215. L668
  3216.     addq.l    #1,d3
  3217. L669
  3218.     cmp.l    -$14(a5),d3
  3219.     blt    L660
  3220. L670
  3221. ;    offset3=new_ctrl->geom_s_stride;
  3222.     move.l    $8(a5),a0
  3223.     move.l    4(a0),-$20(a5)
  3224. ;    offset2=new_ctrl->geom_s_stride*uorder;
  3225.     move.l    $8(a5),a0
  3226.     move.l    4(a0),d0
  3227.     muls.l    $14(a5),d0
  3228.     move.l    d0,d7
  3229. ;    for(j=0;
  3230.     moveq    #0,d3
  3231.     bra    L680
  3232. L671
  3233. ;        *(*ufactors+j*3+1)=tmp_factor1=calc_parametric_factor(ctrl,uorde
  3234.     move.l    d5,-(a7)
  3235.     fmove.s    fp2,-(a7)
  3236.     move.l    -$20(a5),-(a7)
  3237.     move.l    d3,d0
  3238.     muls.l    d7,d0
  3239.     move.l    d0,-(a7)
  3240.     move.l    $14(a5),-(a7)
  3241.     move.l    a2,-(a7)
  3242.     jsr    _calc_parametric_factor
  3243.     add.w    #$18,a7
  3244.     move.l    d0,d4
  3245.     move.l    a3,a1
  3246.     move.l    d3,d0
  3247.     muls.l    #3,d0
  3248.     move.l    (a1),a0
  3249.     lea    0(a0,d0.l*4),a0
  3250.     move.l    d4,4(a0)
  3251. ;        for(i=1;
  3252.     moveq    #1,d2
  3253.     bra.b    L675
  3254. L672
  3255. ;            tmp_factor2=calc_parametric_factor(ctrl,uorder,
  3256.     move.l    d5,-(a7)
  3257.     fmove.s    fp2,-(a7)
  3258.     move.l    -$20(a5),-(a7)
  3259.     move.l    d3,d0
  3260.     muls.l    d7,d0
  3261.     move.l    d2,d1
  3262.     muls.l    -$18(a5),d1
  3263.     add.l    d1,d0
  3264.     move.l    d0,-(a7)
  3265.     move.l    $14(a5),-(a7)
  3266.     move.l    a2,-(a7)
  3267.     jsr    _calc_parametric_factor
  3268.     add.w    #$18,a7
  3269. ;            if(tmp_factor2>tmp_factor1)
  3270.     cmp.l    d4,d0
  3271.     ble.b    L674
  3272. L673
  3273. ;                tmp_factor1=tmp_factor2;
  3274.     move.l    d0,d4
  3275. L674
  3276.     addq.l    #1,d2
  3277. L675
  3278.     cmp.l    -$14(a5),d2
  3279.     blt.b    L672
  3280. L676
  3281. ;        *(*ufactors+j*3+2)=tmp_factor2=calc_parametric_factor(ctrl,uorde
  3282.     move.l    d5,-(a7)
  3283.     fmove.s    fp2,-(a7)
  3284.     move.l    -$20(a5),-(a7)
  3285.     move.l    d3,d0
  3286.     muls.l    d7,d0
  3287.     muls.l    -$18(a5),d2
  3288.     add.l    d2,d0
  3289.     move.l    $8(a5),a0
  3290.     sub.l    $8(a0),d0
  3291.     move.l    d0,-(a7)
  3292.     move.l    $14(a5),-(a7)
  3293.     move.l    a2,-(a7)
  3294.     jsr    _calc_parametric_factor
  3295.     add.w    #$18,a7
  3296.     move.l    a3,a1
  3297.     move.l    d3,d1
  3298.     muls.l    #3,d1
  3299.     move.l    (a1),a0
  3300.     lea    0(a0,d1.l*4),a0
  3301.     move.l    d0,$8(a0)
  3302. ;        if(tmp_factor2>tmp_factor1)
  3303.     cmp.l    d4,d0
  3304.     ble.b    L678
  3305. L677
  3306. ;            *(*ufactors+j*3)=tmp_factor2;
  3307.     move.l    a3,a1
  3308.     move.l    d3,d1
  3309.     muls.l    #3,d1
  3310.     move.l    (a1),a0
  3311.     move.l    d0,0(a0,d1.l*4)
  3312.     bra.b    L679
  3313. L678
  3314. ;            *(*ufactors+j*3)=tmp_factor1;
  3315.     move.l    a3,a1
  3316.     move.l    d3,d0
  3317.     muls.l    #3,d0
  3318.     move.l    (a1),a0
  3319.     move.l    d4,0(a0,d0.l*4)
  3320. L679
  3321.     addq.l    #1,d3
  3322. L680
  3323.     cmp.l    -$10(a5),d3
  3324.     blt    L671
  3325. L681
  3326.     moveq    #0,d0
  3327.     fmovem.x (a7)+,fp2
  3328.     movem.l    (a7)+,d2-d7/a2-a4
  3329.     unlk    a5
  3330.     rts
  3331.  
  3332.     SECTION "_calc_sampling_2D:0",CODE
  3333.  
  3334.  
  3335. ;static GLenum
  3336. _calc_sampling_2D
  3337.     movem.l    d2-d6/a2/a3,-(a7)
  3338.     fmovem.x fp2,-(a7)
  3339.     movem.l    $30(a7),d0/d5
  3340.     movem.l    $3C(a7),d3/a2
  3341.     move.l    $2C(a7),a3
  3342.     fmove.s    $38(a7),fp2
  3343. L683
  3344. ;    factor_cnt=cnt/order;
  3345.     move.l    d0,d4
  3346.     divsl.l    d5,d4
  3347. ;    if((*factors=(GLint *)malloc(sizeof(GLint)*factor_cnt))==NULL)
  3348.     move.l    d4,d0
  3349.     moveq    #2,d1
  3350.     asl.l    d1,d0
  3351.     move.l    d0,-(a7)
  3352.     jsr    _malloc
  3353.     addq.w    #4,a7
  3354.     move.l    d0,(a2)
  3355.     move.l    d0,a0
  3356.     cmp.w    #0,a0
  3357.     bne.b    L685
  3358. L684
  3359.     move.l    #$18A26,d0
  3360.     fmovem.x (a7)+,fp2
  3361.     movem.l    (a7)+,d2-d6/a2/a3
  3362.     rts
  3363. L685
  3364. ;    offset=order*dim;
  3365.     move.l    d5,d0
  3366.     muls.l    d3,d0
  3367.     move.l    d0,d6
  3368. ;    for(i=0;
  3369.     moveq    #0,d2
  3370.     bra.b    L690
  3371. L686
  3372. ;        tmp_factor=calc_factor(ctrl,order,i*offset,dim,tolerance,dim);
  3373.     move.l    d3,-(a7)
  3374.     fmove.s    fp2,-(a7)
  3375.     move.l    d3,-(a7)
  3376.     move.l    d2,d0
  3377.     muls.l    d6,d0
  3378.     move.l    d0,-(a7)
  3379.     move.l    d5,-(a7)
  3380.     move.l    a3,-(a7)
  3381.     jsr    _calc_factor
  3382.     add.w    #$18,a7
  3383. ;        if(tmp_factor == 0)
  3384.     tst.l    d0
  3385.     bne.b    L688
  3386. L687
  3387. ;            (*factors)[i]=1;
  3388.     move.l    (a2),a0
  3389.     move.l    #1,0(a0,d2.l*4)
  3390.     bra.b    L689
  3391. L688
  3392. ;            (*factors)[i]=tmp_factor;
  3393.     move.l    (a2),a0
  3394.     move.l    d0,0(a0,d2.l*4)
  3395. L689
  3396.     addq.l    #1,d2
  3397. L690
  3398.     cmp.l    d4,d2
  3399.     blt.b    L686
  3400. L691
  3401.     moveq    #0,d0
  3402.     fmovem.x (a7)+,fp2
  3403.     movem.l    (a7)+,d2-d6/a2/a3
  3404.     rts
  3405.  
  3406.     SECTION "_set_sampling_and_culling:0",CODE
  3407.  
  3408.  
  3409. ;static void
  3410. _set_sampling_and_culling
  3411. L698    EQU    -$14
  3412.     link    a5,#L698
  3413.     move.l    a2,-(a7)
  3414.     move.l    $8(a5),a2
  3415. L692
  3416. ;    if(nobj->auto_load_matrix==GL_FALSE)
  3417.     tst.b    $12(a2)
  3418.     bne    L697
  3419. L693
  3420. ;        glPushAttrib( (GLbitfield) (GL_VIEWPORT_BIT | GL_TRANSFORM_BIT));
  3421.     pea    $1800.w
  3422.     jsr    _glPushAttrib
  3423.     addq.w    #4,a7
  3424. ;        for(i=0;
  3425.     moveq    #0,d0
  3426.     bra.b    L695
  3427. L694
  3428. ;            m[i]=nobj->sampling_matrices.viewport[i];
  3429.     lea    $94(a2),a0
  3430.     fmove.s    0(a0,d0.l*4),fp0
  3431.     lea    -$14(a5),a0
  3432.     fmove.s    fp0,0(a0,d0.l*4)
  3433.     addq.l    #1,d0
  3434. L695
  3435.     cmp.l    #4,d0
  3436.     blt.b    L694
  3437. L696
  3438. ;        glViewport(m[0],m[1],m[2],m[3]);
  3439.     lea    -$14(a5),a0
  3440.     fmove.s    $C(a0),fp0
  3441.     fmove.l    fp0,d0
  3442.     move.l    d0,-(a7)
  3443.     lea    -$14(a5),a0
  3444.     fmove.s    $8(a0),fp0
  3445.     fmove.l    fp0,d0
  3446.     move.l    d0,-(a7)
  3447.     lea    -$14(a5),a0
  3448.     fmove.s    4(a0),fp0
  3449.     fmove.l    fp0,d0
  3450.     move.l    d0,-(a7)
  3451.     fmove.s    -$14(a5),fp0
  3452.     fmove.l    fp0,d0
  3453.     move.l    d0,-(a7)
  3454.     jsr    _glViewport
  3455.     add.w    #$10,a7
  3456. ;        glMatrixMode(GL_PROJECTION);
  3457.     pea    $1701.w
  3458.     jsr    _glMatrixMode
  3459.     addq.w    #4,a7
  3460. ;        glPushMatrix();
  3461.     jsr    _glPushMatrix
  3462. ;        glLoadMatrixf(nobj->sampling_matrices.proj);
  3463.     pea    $54(a2)
  3464.     jsr    _glLoadMatrixf
  3465.     addq.w    #4,a7
  3466. ;        glMatrixMode(GL_MODELVIEW);
  3467.     pea    $1700.w
  3468.     jsr    _glMatrixMode
  3469.     addq.w    #4,a7
  3470. ;        glPushMatrix();
  3471.     jsr    _glPushMatrix
  3472. ;        glLoadMatrixf(nobj->sampling_matrices.model);
  3473.     pea    $14(a2)
  3474.     jsr    _glLoadMatrixf
  3475.     addq.w    #4,a7
  3476. L697
  3477.     move.l    (a7)+,a2
  3478.     unlk    a5
  3479.     rts
  3480.  
  3481.     SECTION "_revert_sampling_and_culling:0",CODE
  3482.  
  3483.  
  3484. ;static void
  3485. _revert_sampling_and_culling
  3486.     move.l    4(a7),a0
  3487. L699
  3488. ;    if(nobj->auto_load_matrix==GL_FALSE)
  3489.     tst.b    $12(a0)
  3490.     bne.b    L701
  3491. L700
  3492. ;        glMatrixMode(GL_MODELVIEW);
  3493.     pea    $1700.w
  3494.     jsr    _glMatrixMode
  3495.     addq.w    #4,a7
  3496. ;        glPopMatrix();
  3497.     jsr    _glPopMatrix
  3498. ;        glMatrixMode(GL_PROJECTION);
  3499.     pea    $1701.w
  3500.     jsr    _glMatrixMode
  3501.     addq.w    #4,a7
  3502. ;        glPopMatrix();
  3503.     jsr    _glPopMatrix
  3504. ;        glPopAttrib();
  3505.     jsr    _glPopAttrib
  3506. L701
  3507.     rts
  3508.  
  3509.     SECTION "_glu_do_sampling_3D:0",CODE
  3510.  
  3511.  
  3512. ;GLenum
  3513.     XDEF    _glu_do_sampling_3D
  3514. _glu_do_sampling_3D
  3515. L705    EQU    -$8
  3516.     link    a5,#L705
  3517.     movem.l    d2/a2-a4,-(a7)
  3518.     move.l    $8(a5),a2
  3519.     move.l    $14(a5),a3
  3520.     move.l    $10(a5),a4
  3521. L702
  3522. ;    *sfactors=NULL;
  3523.     move.l    a4,a1
  3524.     clr.l    (a1)
  3525. ;    *tfactors=NULL;
  3526.     move.l    a3,a1
  3527.     clr.l    (a1)
  3528. ;    dim=nobj->surface.geom.dim;
  3529.     move.l    $DC(a2),d2
  3530. ;    set_sampling_and_culling(nobj);
  3531.     move.l    a2,-(a7)
  3532.     jsr    _set_sampling_and_culling
  3533.     addq.w    #4,a7
  3534. ;    if((err=calc_sampling_3D(new_ctrl,nobj->sampling_tolerance,dim,
  3535.     move.l    a3,-(a7)
  3536.     move.l    a4,-(a7)
  3537.     move.l    $D8(a2),-(a7)
  3538.     move.l    $D4(a2),-(a7)
  3539.     move.l    d2,-(a7)
  3540.     move.l    $A8(a2),-(a7)
  3541.     move.l    $C(a5),-(a7)
  3542.     jsr    _calc_sampling_3D
  3543.     add.w    #$1C,a7
  3544.     move.l    d0,d2
  3545.     cmp.l    #$18707,d2
  3546.     bne.b    L704
  3547. L703
  3548. ;        revert_sampling_and_culling(nobj);
  3549.     move.l    a2,-(a7)
  3550.     jsr    _revert_sampling_and_culling
  3551.     addq.w    #4,a7
  3552. ;        call_user_error(nobj,err);
  3553.     move.l    d2,-(a7)
  3554.     move.l    a2,-(a7)
  3555.     jsr    _call_user_error
  3556.     addq.w    #$8,a7
  3557.     move.l    #$18707,d0
  3558.     movem.l    (a7)+,d2/a2-a4
  3559.     unlk    a5
  3560.     rts
  3561. L704
  3562. ;    revert_sampling_and_culling(nobj);
  3563.     move.l    a2,-(a7)
  3564.     jsr    _revert_sampling_and_culling
  3565.     addq.w    #4,a7
  3566.     moveq    #0,d0
  3567.     movem.l    (a7)+,d2/a2-a4
  3568.     unlk    a5
  3569.     rts
  3570.  
  3571.     SECTION "_glu_do_sampling_uv:0",CODE
  3572.  
  3573.  
  3574. ;GLenum
  3575.     XDEF    _glu_do_sampling_uv
  3576. _glu_do_sampling_uv
  3577.     movem.l    d2-d6/a2-a4,-(a7)
  3578.     movem.l    $28(a7),a0/a2/a3
  3579.     move.l    $24(a7),a4
  3580. L706
  3581. ;    s_cnt = new_ctrl->s_bezier_cnt;
  3582.     move.l    $60(a0),d5
  3583. ;    t_cnt = new_ctrl->t_bezier_cnt;
  3584.     move.l    $64(a0),d4
  3585. ;    *sfactors=NULL;
  3586.     clr.l    (a2)
  3587. ;    *tfactors=NULL;
  3588.     move.l    a3,a1
  3589.     clr.l    (a1)
  3590. ;    if((*sfactors=(GLint *)malloc(sizeof(GLint)*s_cnt*3))
  3591.     move.l    d5,d0
  3592.     moveq    #2,d1
  3593.     asl.l    d1,d0
  3594.     mulu.l    #3,d0
  3595.     move.l    d0,-(a7)
  3596.     jsr    _malloc
  3597.     addq.w    #4,a7
  3598.     move.l    d0,(a2)
  3599.     move.l    d0,a0
  3600.     cmp.w    #0,a0
  3601.     bne.b    L708
  3602. L707
  3603.     move.l    #$18A26,d0
  3604.     movem.l    (a7)+,d2-d6/a2-a4
  3605.     rts
  3606. L708
  3607. ;    if((*tfactors=(GLint *)malloc(sizeof(GLint)*t_cnt*3))
  3608.     move.l    d4,d0
  3609.     moveq    #2,d1
  3610.     asl.l    d1,d0
  3611.     mulu.l    #3,d0
  3612.     move.l    d0,-(a7)
  3613.     jsr    _malloc
  3614.     addq.w    #4,a7
  3615.     move.l    a3,a1
  3616.     move.l    d0,(a1)
  3617.     move.l    d0,a0
  3618.     cmp.w    #0,a0
  3619.     bne.b    L710
  3620. L709
  3621. ;        free(*sfactors);
  3622.     move.l    (a2),-(a7)
  3623.     jsr    _free
  3624.     addq.w    #4,a7
  3625.     move.l    #$18A26,d0
  3626.     movem.l    (a7)+,d2-d6/a2-a4
  3627.     rts
  3628. L710
  3629. ;    u_steps = nobj->u_step;
  3630.     move.l    a4,a0
  3631.     move.l    $B0(a0),d2
  3632. ;    v_steps = nobj->v_step;
  3633.     move.l    a4,a0
  3634.     move.l    $B4(a0),d1
  3635. ;    for(i=0;
  3636.     moveq    #0,d0
  3637.     bra.b    L712
  3638. L711
  3639. ;        *(*sfactors+i*3) = u_steps;
  3640.     move.l    d0,d3
  3641.     muls.l    #3,d3
  3642.     move.l    (a2),a0
  3643.     move.l    d2,0(a0,d3.l*4)
  3644. ;        *(*sfactors+i*3+1) = u_steps;
  3645.     move.l    d0,d3
  3646.     muls.l    #3,d3
  3647.     move.l    (a2),a0
  3648.     lea    0(a0,d3.l*4),a0
  3649.     move.l    d2,4(a0)
  3650. ;        *(*sfactors+i*3+2) = u_steps;
  3651.     move.l    d0,d3
  3652.     muls.l    #3,d3
  3653.     move.l    (a2),a0
  3654.     lea    0(a0,d3.l*4),a0
  3655.     move.l    d2,$8(a0)
  3656.     addq.l    #1,d0
  3657. L712
  3658.     cmp.l    d5,d0
  3659.     blt.b    L711
  3660. L713
  3661. ;    for(i=0;
  3662.     moveq    #0,d0
  3663.     bra.b    L715
  3664. L714
  3665. ;        *(*tfactors+i*3) = v_steps;
  3666.     move.l    a3,a1
  3667.     move.l    d0,d2
  3668.     muls.l    #3,d2
  3669.     move.l    (a1),a0
  3670.     move.l    d1,0(a0,d2.l*4)
  3671. ;        *(*tfactors+i*3+1) = v_steps;
  3672.     move.l    a3,a1
  3673.     move.l    d0,d2
  3674.     muls.l    #3,d2
  3675.     move.l    (a1),a0
  3676.     lea    0(a0,d2.l*4),a0
  3677.     move.l    d1,4(a0)
  3678. ;        *(*tfactors+i*3+2) = v_steps;
  3679.     move.l    a3,a1
  3680.     move.l    d0,d2
  3681.     muls.l    #3,d2
  3682.     move.l    (a1),a0
  3683.     lea    0(a0,d2.l*4),a0
  3684.     move.l    d1,$8(a0)
  3685.     addq.l    #1,d0
  3686. L715
  3687.     cmp.l    d4,d0
  3688.     blt.b    L714
  3689. L716
  3690.     moveq    #0,d0
  3691.     movem.l    (a7)+,d2-d6/a2-a4
  3692.     rts
  3693.  
  3694.     SECTION "_glu_do_sampling_param_3D:0",CODE
  3695.  
  3696.  
  3697. ;GLenum
  3698.     XDEF    _glu_do_sampling_param_3D
  3699. _glu_do_sampling_param_3D
  3700. L720    EQU    -$8
  3701.     link    a5,#L720
  3702.     movem.l    d2/a2-a4,-(a7)
  3703.     move.l    $8(a5),a2
  3704.     move.l    $14(a5),a3
  3705.     move.l    $10(a5),a4
  3706. L717
  3707. ;    *sfactors=NULL;
  3708.     move.l    a4,a1
  3709.     clr.l    (a1)
  3710. ;    *tfactors=NULL;
  3711.     move.l    a3,a1
  3712.     clr.l    (a1)
  3713. ;    dim=nobj->surface.geom.dim;
  3714.     move.l    $DC(a2),d2
  3715. ;    set_sampling_and_culling(nobj);
  3716.     move.l    a2,-(a7)
  3717.     jsr    _set_sampling_and_culling
  3718.     addq.w    #4,a7
  3719. ;    if((err=calc_sampling_param_3D(new_ctrl,nobj->parametric_tolerance
  3720.     move.l    a3,-(a7)
  3721.     move.l    a4,-(a7)
  3722.     move.l    $D8(a2),-(a7)
  3723.     move.l    $D4(a2),-(a7)
  3724.     move.l    d2,-(a7)
  3725.     move.l    $AC(a2),-(a7)
  3726.     move.l    $C(a5),-(a7)
  3727.     jsr    _calc_sampling_param_3D
  3728.     add.w    #$1C,a7
  3729.     move.l    d0,d2
  3730.     cmp.l    #$18707,d2
  3731.     bne.b    L719
  3732. L718
  3733. ;        revert_sampling_and_culling(nobj);
  3734.     move.l    a2,-(a7)
  3735.     jsr    _revert_sampling_and_culling
  3736.     addq.w    #4,a7
  3737. ;        call_user_error(nobj,err);
  3738.     move.l    d2,-(a7)
  3739.     move.l    a2,-(a7)
  3740.     jsr    _call_user_error
  3741.     addq.w    #$8,a7
  3742.     move.l    #$18707,d0
  3743.     movem.l    (a7)+,d2/a2-a4
  3744.     unlk    a5
  3745.     rts
  3746. L719
  3747. ;    revert_sampling_and_culling(nobj);
  3748.     move.l    a2,-(a7)
  3749.     jsr    _revert_sampling_and_culling
  3750.     addq.w    #4,a7
  3751.     moveq    #0,d0
  3752.     movem.l    (a7)+,d2/a2-a4
  3753.     unlk    a5
  3754.     rts
  3755.  
  3756.     SECTION "_glu_do_sampling_2D:0",CODE
  3757.  
  3758.  
  3759. ;GLenum
  3760.     XDEF    _glu_do_sampling_2D
  3761. _glu_do_sampling_2D
  3762.     movem.l    d2-d4/a2-a4,-(a7)
  3763.     movem.l    $24(a7),d2-d4/a4
  3764.     movem.l    $1C(a7),a2/a3
  3765. L721
  3766. ;    set_sampling_and_culling(nobj);
  3767.     move.l    a2,-(a7)
  3768.     jsr    _set_sampling_and_culling
  3769.     addq.w    #4,a7
  3770. ;    err=calc_sampling_2D(ctrl,cnt,order,nobj->sampling_tolerance,dim,
  3771.     move.l    a4,-(a7)
  3772.     move.l    d4,-(a7)
  3773.     move.l    $A8(a2),-(a7)
  3774.     move.l    d3,-(a7)
  3775.     move.l    d2,-(a7)
  3776.     move.l    a3,-(a7)
  3777.     jsr    _calc_sampling_2D
  3778.     add.w    #$18,a7
  3779.     move.l    d0,d2
  3780. ;    revert_sampling_and_culling(nobj);
  3781.     move.l    a2,-(a7)
  3782.     jsr    _revert_sampling_and_culling
  3783.     addq.w    #4,a7
  3784.     move.l    d2,d0
  3785.     movem.l    (a7)+,d2-d4/a2-a4
  3786.     rts
  3787.  
  3788.     SECTION "_glu_do_sampling_u:0",CODE
  3789.  
  3790.  
  3791. ;GLenum
  3792.     XDEF    _glu_do_sampling_u
  3793. _glu_do_sampling_u
  3794.     movem.l    d2/d3/a2/a3,-(a7)
  3795.     move.l    $20(a7),d0
  3796.     move.l    $1C(a7),d2
  3797.     move.l    $28(a7),a2
  3798.     move.l    $14(a7),a3
  3799. L722
  3800. ;    cnt /= order;
  3801.     divsl.l    d0,d2
  3802. ;    if((*factors=(GLint *)malloc(sizeof(GLint)*cnt))
  3803.     move.l    d2,d0
  3804.     moveq    #2,d1
  3805.     asl.l    d1,d0
  3806.     move.l    d0,-(a7)
  3807.     jsr    _malloc
  3808.     addq.w    #4,a7
  3809.     move.l    d0,(a2)
  3810.     move.l    d0,a0
  3811.     cmp.w    #0,a0
  3812.     bne.b    L724
  3813. L723
  3814.     move.l    #$18A26,d0
  3815.     movem.l    (a7)+,d2/d3/a2/a3
  3816.     rts
  3817. L724
  3818. ;    u_steps = nobj->u_step;
  3819.     move.l    a3,a0
  3820.     move.l    $B0(a0),d1
  3821. ;    for(i=0;
  3822.     moveq    #0,d0
  3823.     bra.b    L726
  3824. L725
  3825. ;        (*factors)[i] = u_steps;
  3826.     move.l    (a2),a0
  3827.     move.l    d1,0(a0,d0.l*4)
  3828.     addq.l    #1,d0
  3829. L726
  3830.     cmp.l    d2,d0
  3831.     blt.b    L725
  3832. L727
  3833.     moveq    #0,d0
  3834.     movem.l    (a7)+,d2/d3/a2/a3
  3835.     rts
  3836.  
  3837.     SECTION "_glu_do_sampling_param_2D:0",CODE
  3838.  
  3839.  
  3840. ;GLenum
  3841.     XDEF    _glu_do_sampling_param_2D
  3842. _glu_do_sampling_param_2D
  3843.     movem.l    d2-d5/a2-a4,-(a7)
  3844.     fmovem.x fp2,-(a7)
  3845.     movem.l    $3C(a7),d3/a2
  3846.     movem.l    $34(a7),d4/d5
  3847.     move.l    $30(a7),a3
  3848.     move.l    $2C(a7),a4
  3849. L728
  3850. ;    set_sampling_and_culling(nobj);
  3851.     move.l    a4,-(a7)
  3852.     jsr    _set_sampling_and_culling
  3853.     addq.w    #4,a7
  3854. ;    tolerance = nobj->parametric_tolerance;
  3855.     move.l    a4,a0
  3856.     fmove.s    $AC(a0),fp2
  3857. ;    cnt /= order;
  3858.     divsl.l    d5,d4
  3859. ;    if((*factors=(GLint *)malloc(sizeof(GLint)*cnt))
  3860.     move.l    d4,d0
  3861.     moveq    #2,d1
  3862.     asl.l    d1,d0
  3863.     move.l    d0,-(a7)
  3864.     jsr    _malloc
  3865.     addq.w    #4,a7
  3866.     move.l    d0,(a2)
  3867.     move.l    d0,a0
  3868.     cmp.w    #0,a0
  3869.     bne.b    L730
  3870. L729
  3871. ;        revert_sampling_and_culling(nobj);
  3872.     move.l    a4,-(a7)
  3873.     jsr    _revert_sampling_and_culling
  3874.     addq.w    #4,a7
  3875.     move.l    #$18A26,d0
  3876.     fmovem.x (a7)+,fp2
  3877.     movem.l    (a7)+,d2-d5/a2-a4
  3878.     rts
  3879. L730
  3880. ;    u_steps = nobj->u_step;
  3881. ;    for(i=0;
  3882.     moveq    #0,d2
  3883.     bra.b    L732
  3884. L731
  3885. ;        (*factors)[i] = calc_parametric_factor(ctrl,order,0,
  3886.     move.l    d3,-(a7)
  3887.     fmove.s    fp2,-(a7)
  3888.     move.l    d3,-(a7)
  3889.     clr.l    -(a7)
  3890.     move.l    d5,-(a7)
  3891.     move.l    a3,-(a7)
  3892.     jsr    _calc_parametric_factor
  3893.     add.w    #$18,a7
  3894.     move.l    (a2),a0
  3895.     move.l    d0,0(a0,d2.l*4)
  3896.     addq.l    #1,d2
  3897. L732
  3898.     cmp.l    d4,d2
  3899.     blt.b    L731
  3900. L733
  3901. ;    revert_sampling_and_culling(nobj);
  3902.     move.l    a4,-(a7)
  3903.     jsr    _revert_sampling_and_culling
  3904.     addq.w    #4,a7
  3905.     moveq    #0,d0
  3906.     fmovem.x (a7)+,fp2
  3907.     movem.l    (a7)+,d2-d5/a2-a4
  3908.     rts
  3909.  
  3910.     SECTION "_glu_do_sampling_crv:0",CODE
  3911.  
  3912.  
  3913. ;lling_test_3D(GLU
  3914.     XDEF    _glu_do_sampling_crv
  3915. _glu_do_sampling_crv
  3916.     movem.l    d2/d3/a2/a3,-(a7)
  3917.     movem.l    $1C(a7),d0-d2/a0
  3918.     move.l    $18(a7),a1
  3919.     move.l    $14(a7),a2
  3920. L734
  3921. ;    *factors=NULL;
  3922.     clr.l    (a0)
  3923. ;    switch(nobj->sampling_method)
  3924.     move.l    $A4(a2),d3
  3925.     cmp.l    #$18778,d3
  3926.     beq    L741
  3927.     bgt.b    L746
  3928.     cmp.l    #$18777,d3
  3929.     beq.b    L735
  3930.     bra    L744
  3931. L746
  3932.     cmp.l    #$18779,d3
  3933.     beq.b    L738
  3934.     bra    L744
  3935. ;        
  3936. L735
  3937. ;            if((err=glu_do_sampling_2D(nobj,ctrl,cnt,order,dim,factors))!=
  3938.     move.l    a0,-(a7)
  3939.     move.l    d2,-(a7)
  3940.     move.l    d1,-(a7)
  3941.     move.l    d0,-(a7)
  3942.     move.l    a1,-(a7)
  3943.     move.l    a2,-(a7)
  3944.     jsr    _glu_do_sampling_2D
  3945.     add.w    #$18,a7
  3946.     tst.l    d0
  3947.     beq.b    L737
  3948. L736
  3949. ;                call_user_error(nobj,err);
  3950.     move.l    d0,-(a7)
  3951.     move.l    a2,-(a7)
  3952.     jsr    _call_user_error
  3953.     addq.w    #$8,a7
  3954.     move.l    #$18707,d0
  3955.     movem.l    (a7)+,d2/d3/a2/a3
  3956.     rts
  3957. L737
  3958. ;            
  3959.     bra.b    L745
  3960. L738
  3961. ;            if((err=glu_do_sampling_u(nobj,ctrl,cnt,order,dim,factors))!=
  3962.     move.l    a0,-(a7)
  3963.     move.l    d2,-(a7)
  3964.     move.l    d1,-(a7)
  3965.     move.l    d0,-(a7)
  3966.     move.l    a1,-(a7)
  3967.     move.l    a2,-(a7)
  3968.     jsr    _glu_do_sampling_u
  3969.     add.w    #$18,a7
  3970.     tst.l    d0
  3971.     beq.b    L740
  3972. L739
  3973. ;                call_user_error(nobj,err);
  3974.     move.l    d0,-(a7)
  3975.     move.l    a2,-(a7)
  3976.     jsr    _call_user_error
  3977.     addq.w    #$8,a7
  3978.     move.l    #$18707,d0
  3979.     movem.l    (a7)+,d2/d3/a2/a3
  3980.     rts
  3981. L740
  3982. ;            
  3983.     bra.b    L745
  3984. L741
  3985. ;            if((err=glu_do_sampling_param_2D(nobj,ctrl,cnt,order,dim,facto
  3986.     move.l    a0,-(a7)
  3987.     move.l    d2,-(a7)
  3988.     move.l    d1,-(a7)
  3989.     move.l    d0,-(a7)
  3990.     move.l    a1,-(a7)
  3991.     move.l    a2,-(a7)
  3992.     jsr    _glu_do_sampling_param_2D
  3993.     add.w    #$18,a7
  3994.     tst.l    d0
  3995.     beq.b    L743
  3996. L742
  3997. ;                call_user_error(nobj,err);
  3998.     move.l    d0,-(a7)
  3999.     move.l    a2,-(a7)
  4000.     jsr    _call_user_error
  4001.     addq.w    #$8,a7
  4002.     move.l    #$18707,d0
  4003.     movem.l    (a7)+,d2/d3/a2/a3
  4004.     rts
  4005. L743
  4006. ;            
  4007.     bra.b    L745
  4008. L744
  4009. ;            abort();
  4010.     jsr    _abort
  4011. L745
  4012.     moveq    #0,d0
  4013.     movem.l    (a7)+,d2/d3/a2/a3
  4014.     rts
  4015.  
  4016.     SECTION "_point_in_viewport:0",CODE
  4017.  
  4018.  
  4019. ;static GLboolean
  4020. _point_in_viewport
  4021. L756    EQU    -$148
  4022.     link    a5,#L756
  4023.     movem.l    d2/a2,-(a7)
  4024.     fmovem.x fp2/fp3,-(a7)
  4025.     move.l    $C(a5),d2
  4026.     move.l    $8(a5),a2
  4027. L747
  4028. ;    glGetDoublev(GL_MODELVIEW_MATRIX,model);
  4029.     pea    -$80(a5)
  4030.     pea    $BA6.w
  4031.     jsr    _glGetDoublev
  4032.     addq.w    #$8,a7
  4033. ;    glGetDoublev(GL_PROJECTION_MATRIX,proj);
  4034.     pea    -$100(a5)
  4035.     pea    $BA7.w
  4036.     jsr    _glGetDoublev
  4037.     addq.w    #$8,a7
  4038. ;    glGetIntegerv(GL_VIEWPORT,viewport);
  4039.     pea    -$110(a5)
  4040.     pea    $BA2.w
  4041.     jsr    _glGetIntegerv
  4042.     addq.w    #$8,a7
  4043. ;    if(dim==3)
  4044.     cmp.l    #3,d2
  4045.     bne.b    L749
  4046. L748
  4047. ;        x=(GLdouble)pt[0];
  4048.     fmove.s    (a2),fp0
  4049.     fmove.x    fp0,fp2
  4050. ;        y=(GLdouble)pt[1];
  4051.     fmove.s    4(a2),fp0
  4052.     fmove.x    fp0,fp1
  4053. ;        z=(GLdouble)pt[2];
  4054.     fmove.s    $8(a2),fp0
  4055. ;        gluProject(x,y,z,model,proj,viewport,&winx,&winy,&winz);
  4056.     pea    -$148(a5)
  4057.     pea    -$140(a5)
  4058.     pea    -$138(a5)
  4059.     pea    -$110(a5)
  4060.     pea    -$100(a5)
  4061.     pea    -$80(a5)
  4062.     fmove.d    fp0,-(a7)
  4063.     fmove.d    fp1,-(a7)
  4064.     fmove.d    fp2,-(a7)
  4065.     jsr    _gluProject
  4066.     add.w    #$30,a7
  4067.     bra.b    L750
  4068. L749
  4069. ;        w=(GLdouble)pt[3];
  4070.     fmove.s    $C(a2),fp0
  4071.     fmove.x    fp0,fp3
  4072. ;        x=(GLdouble)pt[0]/w;
  4073.     fmove.s    (a2),fp0
  4074.     fmove.x    fp0,fp2
  4075.     fdiv.x    fp3,fp2
  4076. ;        y=(GLdouble)pt[1]/w;
  4077.     fmove.s    4(a2),fp0
  4078.     fmove.x    fp0,fp1
  4079.     fdiv.x    fp3,fp1
  4080. ;        z=(GLdouble)pt[2]/w;
  4081.     fmove.s    $8(a2),fp0
  4082.     fdiv.x    fp3,fp0
  4083. ;        gluProject(x,y,z,model,proj,viewport,&winx,&winy,&winz);
  4084.     pea    -$148(a5)
  4085.     pea    -$140(a5)
  4086.     pea    -$138(a5)
  4087.     pea    -$110(a5)
  4088.     pea    -$100(a5)
  4089.     pea    -$80(a5)
  4090.     fmove.d    fp0,-(a7)
  4091.     fmove.d    fp1,-(a7)
  4092.     fmove.d    fp2,-(a7)
  4093.     jsr    _gluProject
  4094.     add.w    #$30,a7
  4095. L750
  4096. ;    if((GLint)winx >= viewport[0] && (GLint)winx < viewport[2] &&
  4097.     fmove.d    -$138(a5),fp0
  4098.     fmove.l    fp0,d1
  4099.     cmp.l    -$110(a5),d1
  4100.     blt.b    L755
  4101. L751
  4102.     fmove.d    -$138(a5),fp0
  4103.     fmove.l    fp0,d1
  4104.     lea    -$110(a5),a0
  4105.     cmp.l    $8(a0),d1
  4106.     bge.b    L755
  4107. L752
  4108.     fmove.d    -$140(a5),fp0
  4109.     fmove.l    fp0,d1
  4110.     lea    -$110(a5),a0
  4111.     cmp.l    4(a0),d1
  4112.     blt.b    L755
  4113. L753
  4114.     fmove.d    -$140(a5),fp0
  4115.     fmove.l    fp0,d1
  4116.     lea    -$110(a5),a0
  4117.     cmp.l    $C(a0),d1
  4118.     bge.b    L755
  4119. L754
  4120.     moveq    #1,d0
  4121.     fmovem.x (a7)+,fp2/fp3
  4122.     movem.l    (a7)+,d2/a2
  4123.     unlk    a5
  4124.     rts
  4125. L755
  4126.     moveq    #0,d0
  4127.     fmovem.x (a7)+,fp2/fp3
  4128.     movem.l    (a7)+,d2/a2
  4129.     unlk    a5
  4130.     rts
  4131.  
  4132.     SECTION "_fine_culling_test_3D:0",CODE
  4133.  
  4134.  
  4135. ;GLboolean
  4136.     XDEF    _fine_culling_test_3D
  4137. _fine_culling_test_3D
  4138. L778    EQU    -$8
  4139.     link    a5,#L778
  4140.     movem.l    d2-d7/a2/a3,-(a7)
  4141.     move.l    $20(a5),d4
  4142.     move.l    $14(a5),d5
  4143.     move.l    $1C(a5),d6
  4144.     move.l    $18(a5),d7
  4145.     move.l    $8(a5),a2
  4146.     move.l    $C(a5),a3
  4147. L757
  4148. ;    if(nobj->culling==GL_FALSE)
  4149.     tst.b    (a2)
  4150.     bne.b    L759
  4151. L758
  4152.     moveq    #0,d0
  4153.     movem.l    (a7)+,d2-d7/a2/a3
  4154.     unlk    a5
  4155.     rts
  4156. L759
  4157. ;    set_sampling_and_culling(nobj);
  4158.     move.l    a2,-(a7)
  4159.     jsr    _set_sampling_and_culling
  4160.     addq.w    #4,a7
  4161. ;    if(dim==3)
  4162.     cmp.l    #3,d4
  4163.     bne.b    L769
  4164. L760
  4165. ;        for(i=0;
  4166.     moveq    #0,d3
  4167.     bra.b    L767
  4168. L761
  4169. ;            for(j=0;
  4170.     moveq    #0,d2
  4171.     bra.b    L765
  4172. L762
  4173. ;                if(point_in_viewport(pts+i*s_stride+j*t_stride,dim))
  4174.     move.l    d4,-(a7)
  4175.     move.l    d3,d0
  4176.     muls.l    d7,d0
  4177.     lea    0(a3,d0.l*4),a0
  4178.     move.l    d2,d0
  4179.     muls.l    d6,d0
  4180.     pea    0(a0,d0.l*4)
  4181.     jsr    _point_in_viewport
  4182.     addq.w    #$8,a7
  4183.     tst.b    d0
  4184.     beq.b    L764
  4185. L763
  4186. ;                    revert_sampling_and_culling(nobj);
  4187.     move.l    a2,-(a7)
  4188.     jsr    _revert_sampling_and_culling
  4189.     addq.w    #4,a7
  4190.     moveq    #0,d0
  4191.     movem.l    (a7)+,d2-d7/a2/a3
  4192.     unlk    a5
  4193.     rts
  4194. L764
  4195.     addq.l    #1,d2
  4196. L765
  4197.     cmp.l    d5,d2
  4198.     blt.b    L762
  4199. L766
  4200.     addq.l    #1,d3
  4201. L767
  4202.     cmp.l    $10(a5),d3
  4203.     blt.b    L761
  4204. L768
  4205. ;                    return 
  4206.     bra.b    L777
  4207. L769
  4208. ;        for(i=0;
  4209.     moveq    #0,d3
  4210.     bra.b    L776
  4211. L770
  4212. ;            for(j=0;
  4213.     moveq    #0,d2
  4214.     bra.b    L774
  4215. L771
  4216. ;                if(point_in_viewport(pts+i*s_stride+j*t_stride,dim))
  4217.     move.l    d4,-(a7)
  4218.     move.l    d3,d0
  4219.     muls.l    d7,d0
  4220.     lea    0(a3,d0.l*4),a0
  4221.     move.l    d2,d0
  4222.     muls.l    d6,d0
  4223.     pea    0(a0,d0.l*4)
  4224.     jsr    _point_in_viewport
  4225.     addq.w    #$8,a7
  4226.     tst.b    d0
  4227.     beq.b    L773
  4228. L772
  4229. ;                    revert_sampling_and_culling(nobj);
  4230.     move.l    a2,-(a7)
  4231.     jsr    _revert_sampling_and_culling
  4232.     addq.w    #4,a7
  4233.     moveq    #0,d0
  4234.     movem.l    (a7)+,d2-d7/a2/a3
  4235.     unlk    a5
  4236.     rts
  4237. L773
  4238.     addq.l    #1,d2
  4239. L774
  4240.     cmp.l    d5,d2
  4241.     blt.b    L771
  4242. L775
  4243.     addq.l    #1,d3
  4244. L776
  4245.     cmp.l    $10(a5),d3
  4246.     blt.b    L770
  4247. L777
  4248. ;    revert_sampling_and_culling(nobj);
  4249.     move.l    a2,-(a7)
  4250.     jsr    _revert_sampling_and_culling
  4251.     addq.w    #4,a7
  4252.     moveq    #1,d0
  4253.     movem.l    (a7)+,d2-d7/a2/a3
  4254.     unlk    a5
  4255.     rts
  4256.  
  4257.     SECTION "_fine_culling_test_2D:0",CODE
  4258.  
  4259.  
  4260. ;GLboolean
  4261.     XDEF    _fine_culling_test_2D
  4262. _fine_culling_test_2D
  4263.     movem.l    d2-d5/a2/a3,-(a7)
  4264.     move.l    $2C(a7),d3
  4265.     move.l    $24(a7),d4
  4266.     move.l    $28(a7),d5
  4267.     move.l    $1C(a7),a2
  4268.     move.l    $20(a7),a3
  4269. L779
  4270. ;    if(nobj->culling==GL_FALSE)
  4271.     tst.b    (a2)
  4272.     bne.b    L781
  4273. L780
  4274.     moveq    #0,d0
  4275.     movem.l    (a7)+,d2-d5/a2/a3
  4276.     rts
  4277. L781
  4278. ;    set_sampling_and_culling(nobj);
  4279.     move.l    a2,-(a7)
  4280.     jsr    _set_sampling_and_culling
  4281.     addq.w    #4,a7
  4282. ;    if(dim==3)
  4283.     cmp.l    #3,d3
  4284.     bne.b    L788
  4285. L782
  4286. ;        for(i=0;
  4287.     moveq    #0,d2
  4288.     bra.b    L786
  4289. L783
  4290. ;            if(point_in_viewport(pts+i*stride,dim))
  4291.     move.l    d3,-(a7)
  4292.     move.l    d2,d0
  4293.     muls.l    d5,d0
  4294.     pea    0(a3,d0.l*4)
  4295.     jsr    _point_in_viewport
  4296.     addq.w    #$8,a7
  4297.     tst.b    d0
  4298.     beq.b    L785
  4299. L784
  4300. ;                revert_sampling_and_culling(nobj);
  4301.     move.l    a2,-(a7)
  4302.     jsr    _revert_sampling_and_culling
  4303.     addq.w    #4,a7
  4304.     moveq    #0,d0
  4305.     movem.l    (a7)+,d2-d5/a2/a3
  4306.     rts
  4307. L785
  4308.     addq.l    #1,d2
  4309. L786
  4310.     cmp.l    d4,d2
  4311.     blt.b    L783
  4312. L787
  4313. ;                return 
  4314.     bra.b    L793
  4315. L788
  4316. ;        for(i=0;
  4317.     moveq    #0,d2
  4318.     bra.b    L792
  4319. L789
  4320. ;            if(point_in_viewport(pts+i*stride,dim))
  4321.     move.l    d3,-(a7)
  4322.     move.l    d2,d0
  4323.     muls.l    d5,d0
  4324.     pea    0(a3,d0.l*4)
  4325.     jsr    _point_in_viewport
  4326.     addq.w    #$8,a7
  4327.     tst.b    d0
  4328.     beq.b    L791
  4329. L790
  4330. ;                revert_sampling_and_culling(nobj);
  4331.     move.l    a2,-(a7)
  4332.     jsr    _revert_sampling_and_culling
  4333.     addq.w    #4,a7
  4334.     moveq    #0,d0
  4335.     movem.l    (a7)+,d2-d5/a2/a3
  4336.     rts
  4337. L791
  4338.     addq.l    #1,d2
  4339. L792
  4340.     cmp.l    d4,d2
  4341.     blt.b    L789
  4342. L793
  4343. ;    revert_sampling_and_culling(nobj);
  4344.     move.l    a2,-(a7)
  4345.     jsr    _revert_sampling_and_culling
  4346.     addq.w    #4,a7
  4347.     moveq    #1,d0
  4348.     movem.l    (a7)+,d2-d5/a2/a3
  4349.     rts
  4350.  
  4351.     END
  4352.